正则表达意义

时间:2012-03-21 06:22:02

标签: regex expression

任何人都可以解释这个正则表达式背后的含义吗?

'/<div align="left"><a href="(.*?)">(.*?)<\/a><\/div>/s'

从我所知道的是搜索所有等于左的div对齐标签 但是对于下一部分,我迷路了。

5 个答案:

答案 0 :(得分:1)

'/<div align="left"><a href="(.*?)">(.*?)<\/a><\/div>/s'

上面的正则表达式非常具体,而不是通用的<a>标记正则表达式捕获。这种特殊性(硬编码文本)将使正则表达“脆弱”(容易破碎)。

  1. 开头和结尾的正斜杠是分隔符,表示该字符串是正则表达式字符串。最后一个正斜杠后面的“s”是一个正则表达式修饰符,表示正则表达式中的每个句点都匹配包括换行符在内的所有字符。

  2. 结束</a>标记和结束</div>标记中的正斜杠前面的反斜杠是转义字符。由于第一个正斜杠和最后的正斜杠表示字符串是正则表达式,因此需要转义字符。因此,必须转义表达式中的所有正斜杠。

  3. 此正则表达式仅适用于具有上面显示的确切文本的div。添加到div的任何其他属性都将破坏此正则表达式。甚至div中的一个额外空间也会打破这个正则表达式。

  4. 接下来,div必须后跟一个<a>标记,正如正则表达式中所示。如果将任何其他属性添加到<a>标记,则此正则表达式将会中断。例如,如果href值用单引号而不是双引号分隔,则正则表达式将破坏 - 无法匹配。

  5. href可以包含任何字符。正则表达式将匹配href值中的所有字符,直到找到结束引号。 <a>标记必须只有一个href属性,而不是其他任何内容。 <a>代码必须紧跟一个与正则表达式完全相同的结束</div>代码。

  6. 正则表达式的主要目的是“捕获”某些非常具体的html的href值和<a>标记文本。通常,捕获匹配将输出到数组中。

答案 1 :(得分:0)

无论这是什么以及它是否有效(正则表达式不是匹配html标签的选项),为了解释,正则表达式<a href="(.*?)">(.*?)<\/a><\/div>/s的第二部分只是“尝试“将所有anchor标记与任何网址匹配,后跟包含该网址的文字。

当我说“尝试”时,这就是编写正则表达式的人打算做的事情。

答案 2 :(得分:0)

它在div中搜索左对齐的锚标签。它还保存了href和锚文本,以便以后可以引用它们。

会匹配: <div align="left"><a href="#">test</a></div>

正则表达式有一些问题:首先,应避免使用点运算符(“。”)。它旨在匹配除新行之外的所有内容,这意味着以下内容匹配:

<div align="left"><a href="#">test</a><a href="#">test</a></div>

这会将文本保存为“test”,将href保存为“#">test</a><a href="#”。

答案 3 :(得分:0)

.表示任何单个字符

*表示前一项的零个或多个( greedy 运算符)

?明星在这个位置上是一个奇怪的人。通常?表示“{1}}表示”上一个项目中的一个或多个“,或者如果像.那样使用,则表示”匹配任何内容但不创建反向引用“。

所以(?:.*)也应该与href="(.*)"匹配的内容完全匹配。

无论如何,你的比赛模式应该是:

href="(.*?)"将等于整个div

$0将等于href

中的值

$1将等于标记内的值

您可以在http://www.regextester.com/在线试用正则表达式 - 您还可以选择各种应用程序和小部件进行测试。

答案 4 :(得分:0)

它(尝试)在左对齐的div中找到所有锚标记,并且

  • 比赛的第1组是网址
  • 比赛的第2组是链接文字

仅供参考,正则表达式和HTML不能很好地结合在一起,所以“不要在家里试试这个”。