как сопоставить строку, содержащую хотя бы один алфавит и один * в регулярном выражении - PullRequest
4 голосов
/ 18 мая 2019

Я хочу сопоставить строку длиной 2 ~ 4, которая содержит хотя бы один алфавит и один *, используя Regex.

Например, тестовая строка ниже:

124 adbaad aa1 efd f * ad *** af 848

(Специальный синтаксис ввода не будет содержать более похожих слов, например, abc * def)

Я хочу сопоставить f * ad в строке.

[a-z*]{2,4}

Я пробовал выше регулярное выражение, но строка без * также соответствует.

Я искал в Интернете 2 дня, но не смог найти решение.

Как мне достичь цели?

1 Ответ

4 голосов
/ 18 мая 2019

В начале шаблона ищите 0-3 алфавитных символа, затем *, а также 0-3 * с, а затем алфавитный символ. Это гарантирует, что совпадение начинается в точке, за которой следует хотя бы один алфавит и хотя бы один * в течение следующих 4 символов. Затем сопоставьте [a-z*]{2,4}:

(?=[a-z]{0,3}\*)(?=\*{0,3}[a-z])[a-z*]{2,4}

https://regex101.com/r/90A8rY/1

Это не ясно из вопроса, но если вы хотите сопоставить только отдельные слова, посмотрите назад и посмотрите вперед для пробела (или края строки) в начале и конце шаблона:

(?<= |^)(?=[a-z]{0,3}\*)(?=\*{0,3}[a-z])[a-z*]{2,4}(?= |$)
^^^^^^^^                                           ^^^^^^^

https://regex101.com/r/90A8rY/3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...