正则表达式新行不匹配

时间:2013-11-04 12:12:08

标签: regex

我希望在href属性中匹配包含“goto”的所有锚标签的模式。我正在使用php。我想匹配以下链接:

<a  href='http://www.mysite.com/goto/profile'>links </a>

我写了一个正则表达式:

<a.*(href).*(goto).*<\/a>

它适用于上述所有链接。但是如果锚标记中有新行,则它不匹配。 E.g:

 <a  href='http://www.mysite.com/goto/profile'>
links </a>

因新行而无法匹配。我需要一个正则表达式来匹配带有和不带新行的链接。

4 个答案:

答案 0 :(得分:1)

您正在寻找“全点”修饰符/s

来自manual

  

/ s(PCRE_DOTALL)
  如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,排除了换行符。此修饰符等效于Perl的/ s修饰符。诸如[^ a]之类的否定类始终匹配换行符,与此修饰符的设置无关。

因此,/.*/将为每行创建新匹配,而/.*/s将匹配所有行。

DEMO

DEMO (without DOTALL)

答案 1 :(得分:1)

您可以使用正则表达式:

<a.*(href).*(goto).*([\n]*.*)*<\/a> 

对于解析html,建议使用html解析器而不是正则表达式。根据语言的不同,可以使用各种html解析器。例如:在python中你有美丽的汤。

答案 2 :(得分:0)

使用<a(.|\n)*(href).*(goto)(.|\n)*<\/a>允许多行。

答案 3 :(得分:0)

如果你只想在锚标签中使用多行,正如你所描述的那样,那就这样做:

<a.*(href).*(goto).*(>)(.|\n)*<\/a>

可以在此处找到适用于PHP的智能测试工具:PHP LIVE REGEX TESTER