1. (.*?)
2. (*)
3. #regex#
4. /regex/
一个。上述符号是什么意思?
B.#和/?
我有作弊表,但还没完全搞定。我所知道的*获得 所有的人物,那是什么。*?是为了!
以上模式用于PHP preg_match和preg_replace。
答案 0 :(得分:5)
.
matches any character (roughly)。*?
是一个所谓的quantifier,与前一个令牌至少匹配零次(并且只需要完成匹配所需的频率 - 它是懒惰的,因此?
) (...)
创建一个capturing group,您可以在正则表达式或匹配中引用。它们还用于限制|
交替的范围仅限于正则表达式的部分(就像数学中的括号使优先级清晰一样)。 /.../
和#...#
是整个正则表达式的分隔符,至少在PHP中。从技术上讲,它们不是正则表达式语法的一部分。您使用的分隔符取决于您(但我认为您不能使用\
),并且主要更改您需要在正则表达式中转义的字符。因此,当您匹配可能包含大量斜杠的URI时,/
是一个糟糕的选择。比较以下两个varaints以查找C ++样式的行尾注释:
preg_match('/\/\/.*$/', $text);
preg_match('#//.*$#', $text);
后者更易于阅读,因为您不必在正则表达式本身中转义斜杠。 #
或@
通常用作分隔符,因为它们在文本中非常突出,但您可以使用任何您喜欢的内容。
从技术上讲,你根本不需要这个分隔符。这可能主要是PHP的Perl遗产的残余(在Perl正则表达式中是分隔的,但不包含在字符串中)。其他使用字符串的语言(因为它们没有本机正则表达式文字),例如Java,C#或PowerShell,在没有分隔符的情况下也可以。在PHP中,您可以在结束分隔符后添加选项,例如匹配/a/i
或a
的{{1}}(不区分大小写),但正则表达式A
完全相同,不需要分隔符。
下次你花时间阅读Regular-Expressions.info时,它是关于正则表达式基础知识和先进主题的绝佳参考,能很好地解释很多事情。另请在这方面查看PHP documentation。
答案 1 :(得分:1)
嗯,请坚持每个问题的一个实际问题。
这是对问题3 + 4的回答,因为其他问题已经得到了解答。
正则表达通常由/分隔,例如/ abc123 /或/ foo | bar / i。在PHP中,你可以使用任何你想要的角色。您不限于/,即您可以使用例如#或%,#/ usr / local / bin#。