要匹配以下内容:
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在可选?所以,如果它很好,如果没有,它仍然匹配?
答案 0 :(得分:14)
不确定。把它放在括号中,在它后面加一个问号。包含其中一个空格(否则,如果缺少“at”,您将尝试匹配两个空格。)(at )?
(或其他人建议,(?:at )?
以避免被捕获)。
答案 1 :(得分:12)
不要忘记(?:)
以确保不会捕获括号中的表达
(?:at)?
答案 2 :(得分:2)
当然,你只需要对可选部分进行分组......
(at )*
而且,好吧,我想这会匹配at at 的,所以你可能只想这样做:
(at )?
答案 3 :(得分:2)
其他人得到了答案。这只是一个旁边的重复:正则表达式。
当你在正则表达式中说“条件”时,它指的是正则表达式语言。像任何语言一样,它是代码执行中的一个分支,但代码是一个不同的正则表达式路径,正则表达式的“代码”。
所以在psudo代码中:if(评估为真)执行此常规子表达式,否则执行此其他子表达式。
此条件存在于高级正则表达式引擎中... Perl Perl使用最先进的正则表达式引擎。在版本6及更高版本中,它将成为语言不可或缺的一部分,其中代码和表达无缝混合。
Perl 5.10有这样的结构:
(?(条件)是图案|无图案)。
编辑只是警告Perl的位置,其他所有语言都遵循正则表达式。