[英]java regex to exclude specific strings from a larger one
一段時間以來,我一直在反對這個問題:我想捕獲所有[az]+[0-9]?
不包括字符串的字符序列,例如sin|cos|tan
等。因此,完成我的正則表達式作業時,以下正則表達式應該有效:
(?:(?!(sin|cos|tan)))\b[a-z]+[0-9]?
正如你看到我使用負前瞻與交替沿-在\\b
后的非捕獲組右括號關鍵是要避免匹配in
的sin
等正則表達式有意義,因為事實上我與使用RegexBuddy試了一下和Java作為目標實現並獲得想要的結果,但它不能使用Java Matcher和Pattern對象! 有什么想法嗎?
干杯
\\b
在錯誤的地方。 它要尋找那些沒有正弦/余弦/棕褐色前一個字邊界。 但是在其中任何一個邊界之后的邊界最后會有一個字母,所以它必須是一個字結束邊界,如果下一個字符是az,則不能這樣。
此外,否定前瞻(如果有效)將排除字符串,如cost
,如果您只是過濾掉關鍵字,我不確定您是否需要。
我建議:
\b(?!sin\b|cos\b|tan\b)[a-z]+[0-9]?\b
或者,更簡單地說,您可以匹配\\b[az]+[0-9]?\\b
然后過濾掉關鍵字列表中的字符串。 您並不總是必須在正則表達式中執行所有操作。
所以你想要[az]+[0-9]?
(一個至少一個字母的序列,可選地后面跟一個數字), 除非那個字母序列類似於sin
cos
tan
?
\b(?!(sin|cos|tan)(?=\d|\b))[a-z]+\d?\b
結果:
cos - no match cosy - full match cos1 - no match cosy1 - full match bla9 - full match bla99 - no match
我忘了逃避\\b
for java so \\b
應該是\\\\b
,它現在可以工作了。 干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.