正则表达式与正确的单词不匹配

时间:2015-06-04 12:37:31

标签: regex

我有问题。我有这个正则表达式:

([\w ]*[^'entre']{1}) entre ([\w ]*) y ([\w ]*)

要匹配的一些可能的字符串是:

  • av cordoba entre medrano y gascon
  • esmeralda entre av rivadavia y lavalle
  • av cor1doba entre entre rios y suipac2ha
  • monroe entre aizpurra y av de los constituyentes

事情是,正则表达式匹配前3个字符串,但另一个不匹配,我不知道为什么

你能帮助我吗?

提前致谢

修改

字符串是街道和交叉点的名称。所以,我想找到那个表达式,然后用以下形式替换它:

street1 / STREET2-street3

对于第一个示例字符串,替换符如

av cordoba / medrano-gascon

^ ['entre]就在那里,因为街道名称可以包含字符串“entre”,我必须把它作为街道名称

修改

我找到了解决方案。我必须使用*([\w ]*(?<!entre)) entre ([\w ]*) y ([\w ]*)*

谢谢大家

3 个答案:

答案 0 :(得分:3)

$ pattern = (.*?)(?: entre )(.*?)(?: y )(.*?$)

请参阅Demo

它可以匹配包含“entre”的字符串作为第一个街道名称。

答案 1 :(得分:0)

我想你可以使用

([\w ]*?) entre ([\w ]*) y ([\w ]*)

请参阅demo

因为我们使用贪心匹配,所以不需要使用更多entre

替换为$1/$2-$3我们得到:

av cordoba/medrano-gascon
esmeralda/av rivadavia-lavalle
av cor1doba entre/rios-suipac2ha
monroe/aizpurra-av de los constituyentes

答案 2 :(得分:-1)

为什么不在没有空格的情况下尝试呢?

([\w ]*[^'entre']{1})entre([\w ]*) y ([\w ]*)