Java 正则表达式匹配不被空格包围
背景:为了好玩,我正在构建一个解释器,需要实现一个空白规则 规则是正则表达式在不被空格包围时必须匹配加号“+”。 以下是示例文本:Java 正则表达式匹配不被空格包围,java,regex,regex-negation,regex-lookarounds,Java,Regex,Regex Negation,Regex Lookarounds,背景:为了好玩,我正在构建一个解释器,需要实现一个空白规则 规则是正则表达式在不被空格包围时必须匹配加号“+”。 以下是示例文本: 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
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之间的第一个加号
我不确定我在这里做错了什么。非常感谢您的建议。您只需使用
或者如果+周围有更多字符,则使用
[a-zA-Z]+\+[a-zA-Z]+
更新:您可以通过在“向后看”和“向前看”条件之间移动匹配符号来使用它对不起,我应该修改我的示例。在上面的示例中可以这样做,但它需要匹配括号之类的内容。我可以将其修改为:[a-zA-Z\(\)]+\+[a-zA-Z\(\)]+但是我想让我的代码足够灵活,可以添加更多的标记,而不用担心类似的事情。因为规则是没有空格环绕,所以我想这样做。是的,这就是我想要的。谢谢。我没有意识到(尽管这是有意义的)负面评价的位置很重要。编辑:如果可以,请根据评论中的答案编辑您的答案,以反映我的问题。