0

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

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

我写了一个正则表达式,如:

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

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

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

由于新行,它不匹配。我需要一个正则表达式来匹配有和没有新行的链接。

4

4 回答 4

1

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

手册

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

因此,/.*/将在每行创建新匹配,同时/.*/s将匹配所有行。

演示

演示(不带 DOTALL)

于 2013-11-04T12:22:25.343 回答
1

您可以使用正则表达式:

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

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

于 2013-11-04T12:30:49.533 回答
0

如果您只想在锚标记中使用多行,如您所描述的,请这样做:

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

可以在这里找到 PHP 的智能测试工具:PHP LIVE REGEX TESTER

于 2013-11-04T12:32:27.463 回答
0

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

于 2013-11-04T12:19:20.097 回答