[英]Regular expression to match all numeric characters except 5
當我要匹配除5以外的所有數字字符時,我使用:
[^\D|5]
要么
[^\D5]
或[0-46-9]或[012346789]
當我不想匹配任何數字字符時,可以使用:
[^\d]
要么
[\D]
他們都工作良好。 但是,當我使用[^^\\d5]
或[^^\\d|5]
匹配除5以外的所有數字字符時,它不起作用。
我想在很多情況下使用它。 例如,我想匹配所有\\p{P}
而不是\\:
有什么方法可以使用^\\d
匹配除5以外的所有數字字符?
[123467890]
沒有理由使用所有內容的簡寫形式。 它對正則表達式引擎沒有影響。
實際上,添加交替|
而零長度的斷言^
只會降低您的性能。
[0-46-9]
[]
連字符將在字符類中指定一個范圍。 您可以查找ASCII表以查看正在執行的范圍,例如: [ -Z]
實際上匹配ASCII 33至127。
好的,現在我對您的要求有了更好的了解。
您需要具體說明需要預先匹配的內容。
您可以使用負/正前瞻來做到這一點:
(?!.*?5.*?)(?!.*?\p{Alpha}.*?)(\p{P}*?$|\p{L}*?$)
在以下條件下將匹配:
\\d
只是[0-9]
。 請參閱Java regex參考以進行確認。
只需使用[0-46-9]
。 您可以在regex小提琴中嘗試一下。
更新:
基於利用De Morgan定律並根據OP的評論使用邏輯補碼的要求,這是我對[^\\D5]
的邏輯補碼的解釋。
[^\\D5]
本質上表示“ NOT (非數字字符或 5)”。 將其與參考的Wikipedia中有關De Morgan定律的 “ NOT (A OR B)”進行比較。
我們需要的又是什么“( 不是非數字字符) 和 ( 非 5)”。 將其與引用的Wikipedia文章中的“( NOT A) AND ( NOT B)”進行比較。
這就是我對邏輯ANDing使用一系列先行表達式進行邏輯互補[^\\D5]
解釋:
(?!\D)(?!5).
不,它不使用^^
雙重否定; 如您所見,這不起作用; 但上述邏輯補本質上意味着什么,我們想要在regexese - “( 不是非數字字符) 和 ( 非 5)” -應用到單個字符(即.
)。
您可以在后續的正則表達式小提琴中看到,上述邏輯補碼產生的結果與[^\\D5]
相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.