2011-03-22 59 views
0

這裏有一個小的正則表達式我寫道:試圖寫一個正確的正則表達式,請幫助

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

這個正則表達式應該匹配與新線或空白開始的任何字符序列(因此\ b )(不包括單詞NOT和字母Y或N在指定

((!!N | O)(?!Y {1} | N {1}))並以下劃線(因此_ 。

我的問題是,我希望它不願意(我認爲這是正確的術語)。這意味着: 在接下來的文字:

FILE_sldkf aTEMP_sdlkf 

它會採用不同的方法FILE和aTEMP,現在我得到

FILE_sldkf aTEMP_ 

一起作爲一個匹配。有任何想法嗎?謝謝!

+2

考慮在同時接受了一些答案一次,請參見:http://stackoverflow.com/faq#howtoask – 2011-03-22 07:38:45

回答

0

它有時是單獨檢查的異常,而不是打包在一個單一的正則表達式的一切是個好主意。

所以我會做這樣的事情(僞):

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

我想你想要更多的東西一樣:

\ B [^ NY] * _

這意味着:?單詞邊界(\ b - 雙逃脫喜歡你的代碼),後面跟一個字符除了N或Y([^ NY] - 包括單詞NOT),後跟任何字符(。)0或更多次(*)貪婪地(? - 不勉強),然後是下劃線(_)

+0

或保留爲接近和你原來的正則表達式一樣,如果它在爲你工作,只需在下劃線之前加上貪婪的問號就可以了:\\ b(?!N | O)(?!Y {1} | N {1})。 _ – 2011-03-22 07:22:44

+0

嗨,我嘗試了兩種,但現在它什麼都沒發現。這裏是我嘗試過的文本:FILE_A * B * C – yotamoo 2011-03-22 07:52:33

+0

在開始時b之前是否有正確數量的反斜槓?我測試了第一個正則表達式(使用javascript - 但我非常確定它的語法是相同的)它在'FILE_A * B * C'上並且匹配'FILE_'。並在'FILE_A * B * C FILE_X * Y * Z'上進行測試,並且它仍然匹配'FILE_'。 – 2011-03-22 08:08:51

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_