如何在Ruby中使正则表达式的一部分可选?
要匹配以下内容:
On Mar 3, 2011 11:05 AM, "mr person" wrote:
我有以下正则表达式:
/(On.* (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, [12]\d{3}.* at \d{1,2}:\d{1,2} (?:AM|PM),.*wrote:)/m
有没有办法让at在可选? 所以,如果它很好,如果没有,它仍然匹配?
当然。 把它放在括号中,在它后面加一个问号。 包括其中一个空格(否则如果“at”丢失,你将试图匹配两个空格。) (at )?
(或者像其他人建议的那样, (?:at )?
以避免被捕获)。
不要忘记(?:)
以确保不会捕获括号中的表达式
(?:at)?
当然,你只需要对可选部分进行分组……
(at )*
而且,好吧,我想这会在at处匹配,所以你可能只想做:
(at )?
其他人得到你的答案。 这只是一个旁边的重复:正则表达式。
当你在正则表达式中说“条件”时,它指的是正则表达式语言。 像任何语言一样,它在代码执行中是一个分支,但代码是一个不同的正则表达式路径,正则表达式的“代码”。
所以在psudo代码中:if(评估为true)执行此常规子表达式,否则执行此其他子表达式。
这个条件存在于高级正则表达式引擎中… Perl。
Perl使用最先进的正则表达式引擎。 在版本6及更高版本中,它将成为语言不可或缺的一部分,其中代码和表达无缝混合。
Perl 5.10有这个结构:
(?(条件)是模式|无图案)。
编辑只是一个警告,Perl的位置,每个其他语言都遵循正则表达式。