簡體   English   中英

負數Lookbehind排除Java中一定長度的單詞

[英]Negative Lookbehind to exclude word of certain length in java

我有一個正則表達式

\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?

此正則表達式匹配長度為3或更大的任何拉丁字符。 像ABC一樣,匹配大於3的ABCDE。

我想要的是,此正則表達式僅在拉丁字符大於6的情況下才匹配(假設)。 我不想在正則表達式上方進行更改,而只想排除小於6的拉丁字符匹配項。

所以我添加了Negetive Lookbehind作為

(?<!\w{1,6})

現在正則表達式變為

\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?(?<!\w{1,6})

但是這里排除了所有長度的拉丁字符。

如何在后面添加負向后看以排除長度在{1到6}之間的拉丁字符?

您的正則表達式失敗,因為后面的負數僅檢查字符串末尾的1-6個字。

例如,字符串“ A BCDEFG ”具有7個字符,而您的否定性后面看“ BCDEFG ”是6個字符,則排除所有字符串。

我認為您應該像這樣解決負面的問題:

(?<!^\w{1,6})

注意“ ^”,這意味着您必須從頭開始檢查。

乘以2。
2 x 3 = 6

(?:\\p{L}+[\\s,\،]*(\خ\ی\ا\ب\ا\ن)?[\\s,\،]*\\p{L}+[\\s,\،]*(\ک\و\چ\ه|\ک\و\ی)?[\\s,\،]*\\p{L}+[\\s,\،]*(\پ\ل\ا\ک[ ]\\s*\\d+)?(\\s*\ک\د[ ]\پ\س\ت\ی[ ]\\s*\\d{9})?){2}

擴展

 (?:
      \p{L}+ [\s,\u060C]* 
      (                                              # (1 start)
           \u062E \u06CC \u0627 \u0628 \u0627 \u0646 
      )?                                             # (1 end)
      [\s,\u060C]* \p{L}+ [\s,\u060C]* 
      (                                              # (2 start)
           \u06A9 \u0648 \u0686 \u0647 
        |  \u06A9 \u0648 \u06CC 
      )?                                             # (2 end)
      [\s,\u060C]* \p{L}+ [\s,\u060C]* 
      (                                              # (3 start)
           \u067E \u0644 \u0627 \u06A9 [ ] \s* \d+ 
      )?                                             # (3 end)
      (                                              # (4 start)
           \s* \u06A9 \u062F 
           [ ] \u067E \u0633 \u062A \u06CC 
           [ ] \s* \d{9} 
      )?                                             # (4 end)
 ){2}

您應該使用正向前瞻,這將檢查所有拉丁字符應大於6。這將幫助您:

(?=\w{6,})\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?

暫無
暫無

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

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