为什么模式与我的输入不正确匹配?

时间:2018-11-27 12:45:52

标签: html regex pattern-matching

模式: ^<p .*>&nbsp;</p>$

输入: <p style="margin-bottom: 15px; padding: 0px; text-align: justify; font-family: 'Open Sans', Arial, sans-serif; font-size: 14px; background-color: #ffffff;" class="MsoNormal">aaa</p><p style="margin-bottom: 15px; padding: 0px; text-align: justify; font-family: 'Open Sans', Arial, sans-serif; font-size: 14px; background-color: #ffffff;" class="MsoNormal">&nbsp;</p>

整个输入都匹配。 我在http://regexstorm.net/tester

上尝试过

2 个答案:

答案 0 :(得分:2)

正则表达式通常是“贪婪的”。这意味着它们将尽可能地匹配。

您要表达的内容包括.*,它将匹配0次或更多次的任何字符。其中包括中间的所有<p>...</p>

此外,由于使用了^...$',因此表达式试图匹配整行。

从本质上讲,您的正则表达式与您要执行的操作完全匹配:以<p开头并以>&nbsp;</p>结尾的整行

如果要查找要搜索的字符串的特定部分,则需要更好的正则表达式

答案 1 :(得分:1)

您使用了一个贪婪的量词.*,该词会占用尽可能多的内容,然后回溯以匹配模式的其余部分。如果您的情况与整个文本匹配,然后回溯到&nbsp;</p>的第一次出现。

顺便说一句。您还可以使用^...$来强制整个文本或什么都不做。

请参阅本段的第二个示例:https://medium.com/textmaster-engineering/performance-of-regular-expressions-81371f569698#c8c3