我有一个 Perl 正则表达式。但我不确定什么是“?”在此上下文中的意思。
m#(?:\w+)#
什么是?
意思是这里?
在这种情况下,?
实际上是与:
。放在一起,?:
在分组的开头意味着分组但不捕获括号内的文本/模式(例如,它不会存储在任何反向引用中,例如\1
or $1
,因此您将无法直接访问分组文本)。
更具体地说,一个?
在正则表达式中具有三种不同的含义:
The ?
量词表示表达式的“零次或一次重复”。我见过的典型例子之一是s?he
这将匹配两者she
and he
自从?
使得s
“选修的”
当量词 (+
, *
, ?
,或者一般的{n,m}
) 后面跟着一个?
那么匹配是非贪婪的(即它将匹配从允许匹配继续的位置开始的最短字符串)
-
A ?
在括号组的开头表示您要执行特殊操作。就像在这个例子中一样,:
意思是分组但不捕获。可用操作的确切列表因正则表达式引擎而异,但以下是其中一些操作的列表(不一定包含所有内容):
A. 非捕获组: (?:text)
B. 环视四周: (?=a)
为了展望未来,?!
对于负前瞻,或?<=
and ?<!
用于向后查找(分别为正向和负向)。
C. 条件匹配: (?(condition)then|else)
.
D. 原子分组: a(?>bc|b)c
(火柴abcc
but not abc
;请参阅链接)
E. 内联启用/禁用正则表达式匹配修饰符: ?i
启用一种模式,?-i
禁用。您还可以通过简单地连接多个修饰符来一次启用/禁用多个修饰符,例如?im
(i
不区分大小写并且m
是多行)。
F. 命名捕获组: (?P<name>pattern)
,稍后可以使用(?P=name)
。 .NET 正则表达式引擎使用以下语法(?<name>pattern)
反而。
G. Comments: (?#Comment text)
。我个人认为这只会增加混乱,但我想它可能会有一些用处......自由间距模式可能是一个更好的选择((?x)
修饰符)。
所以从本质上讲,这样做的目的是?
只是上下文。如果您想要零次或多次重复文字(
你必须使用的字符\(?
逃避父母。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)