Негативный Lookbehind, чтобы исключить слово определенной длины в Java
У меня есть регулярное выражение
\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?
Это регулярное выражение соответствует любому латинскому символу длиной 3 или более. Как ABC, ABCDE больше 3 сопоставляются.
Все, что я хотел, это регулярное выражение, чтобы соответствовать только в случае, если латинский символ больше 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?
3 ответа
Ваше регулярное выражение не удалось, потому что отрицательный взгляд позади проверяет только 1-6 слов в конце вашей строки.
Например, со строкой "ABCDEFG" есть 7 символов, и ваш отрицательный взгляд сзади показывает, что "BCDEFG" имеет 6 символов, затем исключите всю вашу строку.
Я думаю, что вы должны исправить отрицательный вид, как это:
(?<!^\w{1,6})
Обратите внимание на "^", это означает, что ваш взгляд сзади должен проверять с самого начала.
Вы должны использовать положительный прогноз, который проверит, что все латинские символы должны быть больше 6. Это поможет вам:
(?=\w{6,})\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?
Умножьте на 2.
2 х 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}