7

我真正需要知道的是:

  1. 是什么(?(意思?
  2. 是什么?:意思?

我想弄清楚的正则表达式是:

(注意以下正则表达式中的上述符号)

(?(?=and )(and )|(blah))(?:[1][9]|[2][0])[0-9][0-9]
4

4 回答 4

3

(?(?=and )(and )|(blah))模式的使用就像 if-then-else 一样 (?(expression)yes|no) ieand将被匹配 if andis 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 个组,其中包含andblah

您的正则表达式不会形成任何组。只有匹配时才会形成一个组blah..

于 2012-10-17T11:15:37.740 回答
2

以下是一些模式的快速参考:

.   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

于 2012-10-17T11:16:43.790 回答
2
(?:...)

是一个非捕获。它的工作方式与 类似(...),但不会创建反向引用(\1等)以供以后重用。

(?(condition)true|else)

是一个尝试匹配的条件condition;如果成功,它将尝试匹配true,如果不成功,它将尝试匹配else

这是一个很少见的正则表达式构造,因为它没有太多用例。在你的情况下,

(?(?=and )(and )|(blah))

可以改写为

(and |blah)
于 2012-10-17T11:17:46.160 回答
0

?:是非捕获组。 (?ifthen|else)用于构造 if, then 表达式。

你可以在这里阅读更多关于这些的信息。

http://www.regular-expressions.info/conditional.html

于 2012-10-17T11:16:18.097 回答