【问题标题】:Regex match NOT surrounded by white spaces正则表达式匹配不被空格包围
【发布时间】:2018-07-07 18:24:31
【问题描述】:

上下文:我正在构建一个解释器,并且需要实现一个空格规则。

规则是当没有被空格包围时,正则表达式必须匹配加“+”。 这是一个示例文本:

a+b c +d g+ h i + j x+y

a 和 b 之间的加号应该匹配,x 和 y 之间的加号也应该匹配。我是正则表达式的新手;但是,我尝试了以下正则表达式:

\+(?<!\s)(?!\s)

这对我来说意味着,

\+         find all "+" matches
(?<!\s)   (neg look behind) that don't have spaces behind
(?!\s)     (neg look ahead) that don't have spaces ahead

但是,当我在 regex101 上运行它时,我只能匹配 a 和 b 之间的第一个加号。

我不确定我在这里做错了什么。感谢您的建议。

【问题讨论】:

    标签: java regex regex-negation regex-lookarounds


    【解决方案1】:

    您可以简单地使用\[a-zA-Z\]\+\[a-zA-Z\]

    或者如果 + 周围有更多字符,则使用

    [a-zA-Z]+\+[a-zA-Z]+
    

    更新:您可以通过在后向和前向条件之间移动匹配符号来使用(?&lt;!\s)[+)-](?!\s)

    【讨论】:

    • 对不起,我应该修改我的示例。这可以在上面的示例中使用,但它需要匹配括号等内容。我可以将其修改为: [a-zA-Z\(\)]+\+[a-zA-Z\(\)]+ 但我想让我的代码足够灵活,可以添加更多令牌而不必担心诸如此类的事情。由于规则周围没有空格,我想弄清楚这种方式。
    • 是的,这就是我要找的。谢谢你。我没有意识到(尽管这是有道理的)背后负面表情的位置很重要。编辑:如果可以,请从 cmets 中找到的答案中编辑您的答案以反映我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多