任何人都可以解释这个正则表达式背后的含义吗?
'/<div align="left"><a href="(.*?)">(.*?)<\/a><\/div>/s'
从我所知道的是搜索所有等于左的div对齐标签 但是对于下一部分,我迷路了。
答案 0 :(得分:1)
'/<div align="left"><a href="(.*?)">(.*?)<\/a><\/div>/s'
上面的正则表达式非常具体,而不是通用的<a>
标记正则表达式捕获。这种特殊性(硬编码文本)将使正则表达“脆弱”(容易破碎)。
开头和结尾的正斜杠是分隔符,表示该字符串是正则表达式字符串。最后一个正斜杠后面的“s”是一个正则表达式修饰符,表示正则表达式中的每个句点都匹配包括换行符在内的所有字符。
结束</a>
标记和结束</div>
标记中的正斜杠前面的反斜杠是转义字符。由于第一个正斜杠和最后的正斜杠表示字符串是正则表达式,因此需要转义字符。因此,必须转义表达式中的所有正斜杠。
此正则表达式仅适用于具有上面显示的确切文本的div。添加到div的任何其他属性都将破坏此正则表达式。甚至div中的一个额外空间也会打破这个正则表达式。
接下来,div必须后跟一个<a>
标记,正如正则表达式中所示。如果将任何其他属性添加到<a>
标记,则此正则表达式将会中断。例如,如果href值用单引号而不是双引号分隔,则正则表达式将破坏 - 无法匹配。
href可以包含任何字符。正则表达式将匹配href值中的所有字符,直到找到结束引号。 <a>
标记必须只有一个href属性,而不是其他任何内容。 <a>
代码必须紧跟一个与正则表达式完全相同的结束</div>
代码。
正则表达式的主要目的是“捕获”某些非常具体的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中找到所有锚标记,并且
仅供参考,正则表达式和HTML不能很好地结合在一起,所以“不要在家里试试这个”。