Негативный 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}
Другие вопросы по тегам