我们为什么要在正则表达式中更喜欢否定字符类?*?

前端之家收集整理的这篇文章主要介绍了我们为什么要在正则表达式中更喜欢否定字符类?*?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在看 Regex的教程.

它是关于如何从这段html中获取class属性

<pre class="ruby" name="code">

使用的正则表达式是

<pre class="([^"]+)" name="code">

他们建议使用上面的而不是

<pre class="(.+)" name="code">

“因为它超出了报价.”

我不明白他们的意思.无论如何它只是工作但是为什么推荐第一个正则表达式.我错过了什么吗?请赐教.

提前致谢.

解决方法

.贪婪地匹配.例如,在

<pre class="ruby" size="medium" name="code">

它会匹配ruby“size =”medium.更糟糕的是,如果您在同一行上有两个标记,它将在标记边界上匹配:

<pre class="ruby" name="code">foo</pre> <pre class="python" name="code">bar</pre>

会导致ruby“name =”code“> foo< / pre>< pre class =”python! 因此,只要您确切知道HTML的外观,.可以工作,但一旦它意外地改变(因为HTML不会这样做),你的正则表达式不会简单地失败(如第二个那样)但它会匹配错误的东西. 因此,第二个正则表达式更安全(因为它更准确地说明允许匹配的内容).你通常应该尽量避免简单.或.*“匹配任何东西”,而是考虑你想要匹配的东西. 也就是说,出于完全相同的原因,您不应该尝试将HTML和其他标记语言与正则表达式匹配,因为有更好的工具.

猜你在找的正则表达式相关文章