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