Java 如何在Eclipse正则表达式搜索中首先匹配检查前置项?
我想准备一个模式,找出单词:Java 如何在Eclipse正则表达式搜索中首先匹配检查前置项?,java,regex,string,eclipse,Java,Regex,String,Eclipse,我想准备一个模式,找出单词: footer 我想介绍以下情况: 页脚从- footer可能是行中的第一个子字符串 下面的正则表达式示例并不像我想的那样工作: (?:[^-]|^)footer 那一个也一样: (?:[^-]footer|^footer) 有人能解释一下为什么上面的示例不能解决问题,并提供一个有效的示例模式吗?这个(?:[^-]|^)footer模式匹配任何字符,但-或字符串开头,然后匹配footer。因此,与[^-]匹配的字符将成为匹配的一部分。(?:[^-]页脚| ^
footer
我想介绍以下情况:
从页脚
-
可能是行中的第一个子字符串footer
(?:[^-]|^)footer
那一个也一样:
(?:[^-]footer|^footer)
有人能解释一下为什么上面的示例不能解决问题,并提供一个有效的示例模式吗?这个(?:[^-]|^)footer
模式匹配任何字符,但-
或字符串开头,然后匹配footer
。因此,与[^-]
匹配的字符将成为匹配的一部分。(?:[^-]页脚| ^footer)
也是如此
您可以使用(?)
(?
或者用一个单词边界来匹配整个单词
\b(?<!-)footer\b
\b(?)?
看
(?如果当前位置左侧有一个-
,则匹配将失败。(?解决了问题,但您能否告诉我此模式(?:[^-]|^)的原因是什么页脚
与页脚不匹配,例如,当行看起来像页脚
?@J3W,这很奇怪,因为[^-]
与换行符匹配,并且页脚
位于行的开头时(?:[^-]| ^)页脚
应该匹配\n页脚
。不知道,可能是Eclipse正则表达式引擎如何处理多行文本的问题。不过,请尝试添加(?m)
在模式的开头,以确保^
与行位置的开头匹配。使用多行模式进行了尝试,但效果相同,感谢您的评论,因此当前的结论是这是一个错误(除非有地方特别说明^是专门处理的:)
\b(?<!-)footer\b