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