正则表达式仅在字符序列之后匹配出现

标签 regex pcre

我想查找该字符串中出现的 w 之后的所有字符,但只查找 foo 之后的字符

edward woodward foo edward woodward

/(?<=w)./g给我 6 场比赛

edward woodward foo edward woodward

我只想要 foo 之后发生的 3 个匹配项。如何修改正则表达式以缩小搜索范围?

最佳答案

您可以将以下正则表达式与 PCRE 引擎一起使用:

(?:\bfoo\b|\G(?!^))[^w]*w\K.

请参阅regex demo .

详细信息

  • (?:\bfoo\b|\G(?!^)) - 整个单词 foo (\bfoo\b) 或 (|) 上一场比赛的结尾 (\G(?!^))
  • [^w]* - 除 w 之外的任何 0+ 个字符
  • w - 一个 w 字符
  • \K - 匹配重置运算符丢弃迄今为止匹配的所有文本
  • . - 任何字符(换行符除外,如果您需要将它们与 . 相匹配,请在模式开始或将 . 替换为 (?s:.))

关于正则表达式仅在字符序列之后匹配出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875506/

相关文章:

java - 如何处理正则表达式中的 ' and "字符?

Python 正则表达式否定回顾

python - 为什么这个 Regexp 使用 pcre 而不是 Python 的步骤减少了 99.89%?

mysql - 如何使用 spring-data-jpa 对具有持久关系的实体执行 native 查询

javascript - 检查字符串是否以一个字母开头,后跟数字,然后是任何字符

ruby - 在 Ruby 中拆分单词以进行计数

java - 一个可用于两个不同字符串 url 的正则表达式

regex - 正则表达式 : How to find dashes between words

r - R 中的否定,如何替换 R 中否定后面的单词?

php - 如何将PHP的eregi改成preg_match