Java 正在尝试编写正确的正则表达式,请帮助

Java 正在尝试编写正确的正则表达式,请帮助,java,regex,Java,Regex,这是我写的一个小正则表达式: \\b(?!N|O)(?!Y{1}|N{1}).+_ 此正则表达式应匹配以新行或空白(因此\b)开头的任何字符序列,不包括not和beinning处的Y或N字符 ((?!N | O)(?!Y{1}| N{1}))并以下划线结尾(因此为|) 我的问题是我希望它不情愿(我认为这是正确的术语)。意思是: 在下一个文本中: FILE_sldkf aTEMP_sdlkf 它将以不同的方式匹配文件和aTEMP,现在我明白了 FILE_sldkf aTEMP_ 一起比赛。

这是我写的一个小正则表达式:

\\b(?!N|O)(?!Y{1}|N{1}).+_
此正则表达式应匹配以新行或空白(因此\b)开头的任何字符序列,不包括not和beinning处的Y或N字符

((?!N | O)(?!Y{1}| N{1}))并以下划线结尾(因此为|)

我的问题是我希望它不情愿(我认为这是正确的术语)。意思是: 在下一个文本中:

FILE_sldkf aTEMP_sdlkf
它将以不同的方式匹配文件和aTEMP,现在我明白了

FILE_sldkf aTEMP_ 

一起比赛。有什么想法吗?谢谢

我想你想要的是:

\b[^NY].*_

这意味着:单词边界(\b-像代码一样双转义),后跟除N或Y以外的字符([^NY]-包括单词NOT),后跟任意字符(.)0或更多次(*)贪婪地(?-不勉强地),后跟下划线({p>
\b[^NY\s](?!\w*不\w*)\w+?{/code>,我想这就是你要找的正则表达式。。您应该为java多放一个转义字符

样品

文件\u sldkf\uuuu sdlkf NOT \uuu NER\u FG YER\u343\u4434\uuuu文件NOT \uuufil_

匹配项:


文件aTEMP 343文件fil有时最好单独检查异常,而不是将所有内容打包在一个正则表达式中

因此,我会这样做(伪代码):


或者,如果您的原始正则表达式对您有效,请在下划线前添加贪婪的问号,如下所示:\\b(?!N|O)(?!Y{1}N{1})。+?\N我尝试了这两种方法,但现在都找不到。下面是我试过的文本:FILE_ABCDo你在开始的b之前有正确数量的反斜杠。我测试了第一个正则表达式(使用javascript——但我很确定语法是相同的),它是在“FILE_ABC”上测试的,并且它与“FILE_ABC”匹配。并在FielayABC FieleXYZ上进行测试,它仍然匹配Fiele'。考虑偶尔接受一些答案,请参见:
if (string matches "\\b(\\w+_)") then
    matched = extract matched part for () group 1
    if (matched not matches "^(N|Y|NOT)") then  ...