这个正则表达式在php中意味着什么?

时间:2014-02-07 12:46:02

标签: php regex

有人可以解释一下这个正则表达式意味着什么吗?

#<hr(.*)class="system-pagebreak"(.*)\/>#iU

是否有工具将这些常规表达式转换为普通单词?

5 个答案:

答案 0 :(得分:6)

尝试*匹配具有<hr>属性的所有class="system-pagebreak"代码。

(.*)hr之间的class段与结束/>匹配“零个或多个字符”,因此它可以匹配

之类的内容
<hr id="what" class="system-pagebreak" style="display:block" />

最后的#iU使其不区分大小写(i)和不合格(U),以便.*匹配不会占用整个文档

  

是否有工具将这些常规表达式转换为普通单词?

不是吗?你能说“正常的话”是什么意思?这是一个非常直接的正则表达式,你不能在不失去意义的情况下将它“转换”为其他任何东西。 测试正则表达式有很多网站,例如Regex101

*请注意,我说尝试,因为这是尝试与(X)HTML交互的非常糟糕的方式,并且肯定会最终破解。您应该使用DOM-parser

答案 1 :(得分:1)

此正则表达式将任何自闭合小时与“sytem-pagebreak”类匹配,但不与其他类匹配。

“实际”正则表达式是#之间的部分 后面的iU是两个“标志”,指定正则表达式的行为方式。 i表示正则表达式不区分大小写,U表示默认情况下正则表达式限定符是惰性的。

正则表达式的第一部分(<hr)将被评估为字符串文字。它匹配任何组合,如:

- <hr
- <Hr
- <hR
- <HR

然后进行小组评估(由()标记)。评估将是特殊的字符.(任何字符),它将被匹配多次。

然后

跟随class="system-pagebreak"的文字字符串评估。这将匹配以下内容:

  • class =“system-pagebreak someclass”
  • class =“system-pagebreak”

之后再次出现任何字符,然后是/>的字面匹配。反斜杠只是用于从正则表达式中转义斜杠(因为它也是一个特殊的字符)。

答案 2 :(得分:0)

它会将<hr>标记与class="system-pagebreak"属性相匹配。它还将捕获hr和class之间以及第二个引号和标记末尾(/>)之间的任何内容。 /逃避斜线。我让它变得不敏感而且不合适。磅(#)标志标志着模式的开始和结束。

答案 3 :(得分:0)

  

是否有工具将这些常规表达式转换为普通单词?

您可以使用像www.regexper.com这样的工具来显示正则表达式:http://www.regexper.com/#%23%3Chr(.)class%3D%22system-pagebreak%22(.)%5C%2F%3E%23这有助于理解它。

  

有人可以解释一下这个正则表达式意味着什么吗?

已经有足够好的答案:)

答案 4 :(得分:0)

此正则表达式将匹配<hr之后同一行中的所有字符,直到满足class="system-pagebreak",并将其放在第一个捕获组中。然后,它会将所有字符(始终在同一行)放入捕获组2中,直到/>

目标可能是找到包含类system-pagebreak的自动关闭hr标记。然而,这是一个糟糕的模式,因为它也会匹配这种字符串:

<hr><div class="system-pagebreak"><img src="image.jpg" />