我有一个正则表达式
\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?
此正则表达式匹配长度大于等于3的所有拉丁字符。喜欢 匹配大于3的ABC,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}之间的拉丁字符?
答案 0 :(得分:1)
您的正则表达式失败,因为后面的负向查找仅检查字符串末尾的1-6个字。
例如,字符串为“ A BCDEFG ”的字符为7个字符,而您的否定式后面字符为“ BCDEFG ”为6个字符的字符,则排除所有字符串。 / p>
我认为您应该像这样解决负面的情况:
(?<!^\w{1,6})
请注意“ ^”,这意味着您必须从头开始检查。
答案 1 :(得分:0)
乘以2。
2 x 3 = 6
(?:\p{L}+[\s,\u060C]*(\u062E\u06CC\u0627\u0628\u0627\u0646)?[\s,\u060C]*\p{L}+[\s,\u060C]*(\u06A9\u0648\u0686\u0647|\u06A9\u0648\u06CC)?[\s,\u060C]*\p{L}+[\s,\u060C]*(\u067E\u0644\u0627\u06A9[ ]\s*\d+)?(\s*\u06A9\u062F[ ]\u067E\u0633\u062A\u06CC[ ]\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}
答案 2 :(得分:0)
您应该使用正向前瞻,这将检查所有拉丁字符应大于6。这将帮助您:
(?=\w{6,})\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?