[英]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.