试着写一个正确的正则表达式,请帮忙

时间:2011-03-22 07:11:47

标签: java regex

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

\\b(?!N|O)(?!Y{1}|N{1}).+_

这个正则表达式应该匹配以新行或空格开头的任何字符序列(因此\ b)不包括单词NOT和beinning中的字符Y或N

((?!N | O)(?!Y {1} | N {1}))并以下划线结束(因此_)。

我的问题是我希望它不情愿(我认为这是正确的术语)。含义: 在下一篇文章中:

FILE_sldkf aTEMP_sdlkf

它会以不同的方式匹配FILE和aTEMP,现在我得到了

FILE_sldkf aTEMP_ 

一起作为一场比赛。有任何想法吗?谢谢!

3 个答案:

答案 0 :(得分:0)

我想你想要更像的东西:

\ B [^ NY]。*?_

这意味着:单词边界(\ b - 双重转义,就像你的代码一样),后跟一个N或Y以外的字符([^ NY] - 包括单词NOT)后跟任何字符(。)0或更多时间(*)贪婪(? - 不是不情愿)后跟下划线(_)

答案 1 :(得分:0)

\b[^NY\s](?!\w*NOT\w*)\w+?_,我想这是你正在寻找的正则表达式..你应该为java添加一个转义字符..

示例;

FILE_sldkf_ aTEMP_sdlkf NOT_ NER_FG YER_ 343_4434_ FileNOT_ fil _

匹配:

FILE_ aTEMP 343_ fil _

答案 2 :(得分:0)

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

因此我会做这样的事情(伪代码):

if (string matches "\\b(\\w+_)") then
    matched = extract matched part for () group 1
    if (matched not matches "^(N|Y|NOT)") then  ...