正则表达式中的特殊符号
如:
preg_match('/.+?hxx/is', hxx));
返回,0,表示没有匹配,这是因为 .+?
的作用,具体讲一下。
.的作用
- 作用:匹配除换行符(
\n
)以外的任意单个字符。 - 修饰符影响:当使用
s
修饰符(单行模式)时,.
也能匹配换行符。
如:
preg_match('/a.b/', acb));
- 有.时:可以匹配像
aab
、acb
、a b
这样的字符串,因为.
可以匹配任意字符(除了换行符,除非使用s
修饰符)。 - 无.时(例如
/ab/
):只能匹配ab
,不能匹配中间有其他字符的情况。
+的作用
- 作用:匹配前面的子表达式一次或多次(贪婪模式,尽可能多地匹配)。
- 组合使用:当与
?
组合成+?
时,表示非贪婪模式(尽可能少地匹配)。
如:
preg_match('/a+/', aaa));
- 有+时:可以匹配一个或多个连续的
a
,如a
、aa
、aaa
等。 - 无+时(例如
/a/
):只能匹配单个a
,不能匹配多个。
?的作用
- 作用:
- 单独使用时:匹配前面的子表达式零次或一次(即前面的内容是可选的)。
- 紧跟在量词(如
*
、+
、?
、{n}
等)后面时:将贪婪模式转换为非贪婪模式(最小匹配)。
情况1:单独使用
如:
preg_match('/a?b/', ab));
- 有?时:可以匹配
b
(因为a
出现0次)或ab
(a
出现1次),但不能匹配aab
。 - 无?时(例如
/ab/
):只能匹配ab
,不能匹配b
。
情况2:作为非贪婪修饰符(与量词组合)
如:
preg_match('/a+?b/', aab));
- 有?(非贪婪模式)时:在字符串
aaab
中,会匹配aab
(因为+?
会尽可能少地匹配,只匹配一个a
,然后遇到b
就停止)。 - 无?(贪婪模式)时:在字符串
aaab
中,会匹配整个aaab
(因为+
会尽可能多地匹配)。
*的作用
- 有\*: 允许前面的元素出现0次或多次。即该元素可以没有,也可以重复多次。
- 无\*: 前面的元素必须恰好出现一次(如果没有其他量词修饰的话)。
如:
preg_match('/ab*c/', 'ac'); // 匹配 "ac"(b出现0次) // 匹配 "abc" // 匹配 "abbbbc"
^的作用
作用:
- 匹配字符串的开始位置
- 在多行模式(
m
修饰符)下也匹配每行的开头
如:
preg_match('/^abc/', 'abc'); //匹配 "abc123" //不匹配 "123abc"
$的作用
作用
- 匹配字符串的结束位置
- 在多行模式(
m
修饰符)下也匹配每行的结尾
如:
preg_match('/abc$/', 'abc'); //不匹配 "abc123" //匹配 "123abc"
综合对比表
元字符 | 示例表达式 | 匹配行为 | 示例输入 | 匹配结果 |
---|---|---|---|---|
. | /a.b/ | 匹配任意单个字符(除换行符) | axb | 匹配axb |
无. | /ab/ | 只能匹配字面ab | axb | 不匹配 |
+ | /a+/ | 匹配1个或多个a | aaa | 匹配整个aaa |
无+ | /a/ | 只能匹配单个a | aaa | 只匹配第一个a |
? (单独) | /a?b/ | a 出现0次或1次 | b | 匹配b |
无? | /ab/ | 只能匹配ab | b | 不匹配 |
+? | /a+?b/ | 非贪婪匹配:尽可能少地匹配a | aaab | 匹配aab (从第二个a 开始) |
+ (无? ) | /a+b/ | 贪婪匹配:尽可能多地匹配a | aaab | 匹配整个aa |
^ | /^a/ | 匹配出现在开头的a | a | 匹配到了开头的 a |
总结
就是最近经常遇到一些这类的 特殊符号,搞不懂什么意思,网上也没有很全面的教程,就问al,自己总结了一下。
到此这篇关于正则表达式中特殊符号的文章就介绍到这了,更多相关正则表达式特殊符号内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论