我希望在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>
因新行而无法匹配。我需要一个正则表达式来匹配带有和不带新行的链接。
答案 0 :(得分:1)
您正在寻找“全点”修饰符/s
。
来自manual:
/ s(PCRE_DOTALL)
如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,排除了换行符。此修饰符等效于Perl的/ s修饰符。诸如[^ a]之类的否定类始终匹配换行符,与此修饰符的设置无关。
因此,/.*/
将为每行创建新匹配,而/.*/s
将匹配所有行。
答案 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