代码之家  ›  专栏  ›  技术社区  ›  user3452624

字符串中单词最后一次使用的正则表达式

  •  3
  • user3452624  · 技术社区  · 10 年前

    我试图找出如何使用单词作为分隔符来抓取字符串的尾部,但该单词可以在字符串中的任何位置使用。所以只有最后一次使用才能开始抓取。

    例子: Go by the office and pickup milk by the safeway BY tomorrow

    我想抓住 by tomorrow 而不是另一个 by s

    这是我试图使其健壮的正则表达式:

    $pattern = '/^(.*?)(@.*?)?(\sBY\s.*?)?(@.*)?$/i';
    

    我认为消极的展望会做到这一点,但我以前从未使用过

    谢谢

    2 回复  |  直到 10 年前
        1
  •  4
  •   Jerry    10 年前

    我不确定你在正则表达式中还有什么其他功能,但我会使用以下功能:

    $pattern = '/\bby\s(?!.*\bby\b).*?$/i';
    

    regex101 demo

    \b 是单词边界,仅在 \w 和一个 \W 字符或字符串开头/结尾。

    by 比赛 通过 字面上

    \s 匹配空格(也匹配换行符、制表符、换行符、回车符)

    (?!.*\bby\b) 是否定的前瞻,如果有另一个单词,将阻止匹配 通过 向前地

    .*?$ 是获得字符串的剩余部分,直到字符串结束。

        2
  •  2
  •   donfuxx    10 年前

    匹配最后一个 BY (大写和小写字母)尝试以下正则表达式:

    \b[bB][yY]\b(?!.*\b[bB][yY]\b.*)
    

    请在此处查看演示 http://regex101.com/r/uA2rL0

    这使用 \b 单词边界以避免匹配以下内容 nearby 正如你所说的一个负面展望。