正则表达式:'一个或零'不起作用

时间:2013-07-21 04:46:03

标签: regex

对此进行测试 http://tools.netshiftmedia.com/regexlibrary/

好吧,我想匹配下面的句子:

首先没有我

首先是我

首先没有最后

首先是最后一次

首先不是最后一次

第一个最后

首先不是最后一次

第一个la last



最后一个

常规模式:

first ((no )?((lo)|(no)|(la)|(te)|(me)))? last

它无法比拟

first last

如何才能与之匹配

first last

6 个答案:

答案 0 :(得分:3)

在正则表达式的某处添加一个可选空格,例如:

first ((no )?(((lo)|(no)|(la)|(te)|(me)) ))?last

你的正则表达式需要两个空格 - 在可选的中央正则表达式的每一端都有一个空格。

这个正则表达式将“last”的前导空格移动到“lo | no | la ...”正则表达式的尾随空格,使其具有与可选“no”类似的效果。

答案 1 :(得分:1)

您的正则表达式包含两个空格。

删除其中一个。

first((no )?((lo)|(no)|(la)|(te)|(me)))? last

first ((no )?((lo)|(no)|(la)|(te)|(me)))?last

答案 2 :(得分:0)

您当前的正则表达式中有两个空格。使第二个空格可选。

答案 3 :(得分:0)

你的正则表达式有太多空格......

first ((no )?((lo)|(no)|(la)|(te)|(me)))? last

如果我们删除中间位,我们得到

first  last

首先注意空格,以及最后一个空格。删除其中一个空格,它将起作用。

答案 4 :(得分:0)

如果有no,您只需要额外的空间,因此请将其作为群组的一部分:

first ((no )?((lo)|(no)|(la)|(te)|(me) ))?last

无论你使用空格做什么,都要保持一致并小心他们进入的群体。要么立即将它们放在他们所属的词之后,要么立即放在他们之前。这应该是等效的,但是将空格放在单词之前而不是之后:

first(( no)?( (lo)|(no)|(la)|(te)|(me)))? last

您可能需要考虑将\s字符类与+结合使用,以便更灵活地使用空格。

答案 5 :(得分:0)

尝试这可能会有所帮助。我根据你提供的链接做了这个,所以在真实场景中可能是错误的。

这也匹配(如果你不想要)首先不是最后一个

first ((no )?((lo)|(no)|(la)|(te)|(me))? )?last$