我真正需要知道的是:
- 是什么
(?(
意思? - 是什么
?:
意思?
我想弄清楚的正则表达式是:
(注意以下正则表达式中的上述符号)
(?(?=and )(and )|(blah))(?:[1][9]|[2][0])[0-9][0-9]
(?(?=and )(and )|(blah))
模式的使用就像 if-then-else 一样 (?(expression)yes|no)
ieand
将被匹配 if and
is there elseblah
将被匹配
(?:)
是一个非捕获组。因此它不会包含在组中或用作反向引用 \1
所以,
(?(?=and )(and )|(blah))(?:[1][9]|[2][0])[0-9][0-9]
会匹配
and 1900
blah2000
and 2012
blah2013
注意(这都是关于组的)
使用这个 regex 可以实现同样的目的
(and |blah)(?:[1][9]|[2][0])[0-9][0-9]
。这些正则表达式唯一不同的是所形成的组数。
所以我的正则表达式将形成 1 个组,其中包含and
或blah
您的正则表达式不会形成任何组。只有匹配时才会形成一个组blah
..
以下是一些模式的快速参考:
. Any character except newline.
\. A period (and so on for \*, \(, \\, etc.)
^ The start of the string.
$ The end of the string.
\d,\w,\s A digit, word character [A-Za-z0-9_], or whitespace.
\D,\W,\S Anything except a digit, word character, or whitespace.
[abc] Character a, b, or c.
[a-z] a through z.
[^abc] Any character except a, b, or c.
aa|bb Either aa or bb.
? Zero or one of the preceding element.
* Zero or more of the preceding element.
+ One or more of the preceding element.
{n} Exactly n of the preceding element.
{n,} n or more of the preceding element.
{m,n} Between m and n of the preceding element.
??,*?,+?,
{n}?, etc. Same as above, but as few as possible.
(expr) Capture expr for use with \1, etc.
(?:expr) Non-capturing group.
(?=expr) Followed by expr.
(?!expr) Not followed by expr.
表达式(?(?=and )(and )|(blah))
是if-else
表达式:)
你可以在这里测试正则表达式:Regexpal.com
?:
是非捕获组。
(?ifthen|else)
用于构造 if, then 表达式。
你可以在这里阅读更多关于这些的信息。