1

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

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

首先没有我最后

首先我最后

首先没有最后

先到后

第一个不是最后一个

第一个最后一个

第一个没有最后一个

第一个最后一个

或者

第一个最后一个

常规模式:

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

它无法匹配

first last

怎样才能使这个匹配

first last
4

6 回答 6

3

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

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

您的正则表达式需要两个空格 - 可选中央正则表达式的每一端各一个。

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

于 2013-07-21T04:48:00.233 回答
1

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

删除其中之一。

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

或者

first ((no )?((lo)|(no)|(la)|(te)|(me)))?last
于 2013-07-21T04:47:37.057 回答
0

如果有 a ,你只需要额外的空间no,所以让它成为一个组的一部分:

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

无论您对空格做什么,都要保持一致并注意它们进入哪个组。将它们放在它们所属的单词之后或之前。这应该是等效的,但是在单词之前而不是之后放置空格:

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

您可能需要考虑使用\s字符类+来更灵活地使用空格。

于 2013-07-21T05:10:32.113 回答
0

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

于 2013-07-21T04:48:05.230 回答
0

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

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

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

first  last

注意第一个之后的空格,最后一个之前的空格。删除其中一个空格,它将起作用。

于 2013-07-21T04:49:14.123 回答
0

试试这个可能会有所帮助。我是根据您提供的链接制作的,因此在实际情况下可能是错误的。

这也将匹配(如果你不想要)first no la last last last

first ((no )?((lo)|(no)|(la)|(te)|(me))? )?last$
于 2013-07-21T06:14:24.140 回答