正则表达式和下一个符号不是 '('

标签 regex

我想要一个表达式,其中找到值之后的下一个符号不是“(”。

我有以下基本正则表达式:

(([_A-Za-z]([_\w])+)|([A-Za-z]))

和文字例如:
a3+red+42+_dv+Sy(w12+44)

希望的正则表达式应该返回:
a3, red, _dv, w12

这个基本正则表达式返回
a3, red, _dv, Sy, w12

但我需要排除'Sy',因为下一个符号是“(”。

我尝试以下操作:
(([_A-Za-z]([_\w])+)|([A-Za-z]))(\b)

但它返回
a3+, red+, _dv+, w12)

我不需要下一个符号,仅当下一个符号不是“(”时才需要包含。

最佳答案

你需要做三件事:

  • 将模式包含在原子组中(或至少包含量词的交替的第一部分)
  • 以单词边界开始您的模式(以快速避免无用的位置)
  • 使用先行断言来测试下一个字符(如果有)

  • 结果:
    \b((?>[_A-Za-z]\w+)|[A-Za-z]\b)(?!\()
    

    在这种情况下,第 1 点对于阻止回溯机制很重要:Abcd(没有它,模式将成功并返回 Abc .使用原子组,模式将匹配 Abcd并且由于它无法返回,因此下一个字符将失败。

    编写模式的其他方法:
    \b(?>[A-Za-z]\w*|_\w+)(?!\()
    

    关于正则表达式和下一个符号不是 '(',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950383/

    相关文章:

    JavaScript RegEX 测试不工作

    javascript - Regex中是否有一组javascript或任何其他语言的组

    regex - iis重写将所有页面重定向到主页

    javascript - 从输入字符串中获取包含字符及其 ANSI 颜色的数组

    regex - Perl:如何用它的值替换变量

    Python正则表达式获得最接近的匹配而没有重复的内容

    python - 以括号开头和结尾的正则表达式

    java - 如何拆分多行 INSERT INTO sql 语句?

    python - 如何用希伯来语搜索正则表达式 (Python 2.7)

    regex - 用于匹配仅包含在根目录中的资源的正则表达式