簡體   English   中英

正則表達式以匹配除5以外的所有數字字符

[英]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以外的所有數字字符?

您可以使用以下方式匹配除5以外的所有數字:

[123467890]

沒有理由使用所有內容的簡寫形式。 它對正則表達式引擎沒有影響。

實際上,添加交替| 而零長度的斷言^只會降低您的性能。

較短的版本是:

[0-46-9]

字符類內的連字符/破折號行為[]

連字符將在字符類中指定一個范圍。 您可以查找ASCII表以查看正在執行的范圍,例如: [ -Z]實際上匹配ASCII 33至127。


編輯:

好的,現在我對您的要求有了更好的了解。
您需要具體說明需要預先匹配的內容。

您可以使用負/正前瞻來做到這一點:

(?!.*?5.*?)(?!.*?\p{Alpha}.*?)(\p{P}*?$|\p{L}*?$)

在以下條件下將匹配:

  • 沒有數字5
  • POSIX類中沒有字符:Alpha
  • 具有Unicode屬性“字母”或“標點”的任何字符

\\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) ANDNOT B)”進行比較。

這就是我對邏輯ANDing使用一系列先行表達式進行邏輯互補[^\\D5]解釋:

(?!\D)(?!5).

不,它不使用^^雙重否定; 如您所見,這不起作用; 但上述邏輯補本質上意味着什么,我們想要在regexese - “( 不是非數字字符) 5)” -應用到單個字符(即. )。

您可以在后續的正則表達式小提琴中看到,上述邏輯補碼產生的結果與[^\\D5]相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM