Как найти первое вхождение подстрок, не оканчивающихся указанными символами - PullRequest
1 голос
/ 24 января 2020

Я выберу первое вхождение строки только из алфавита, которая не заканчивается ни одним из символов ".", ":" и ";"

Например:

"float a bbc 10" --> "float"
"float.h" --> null
"float:: namespace" --> "namesapace"
"float;" --> null

Я придумал регулярное выражение \G([A-z]+)(?![:;\.]), но оно игнорирует только символы перед запрещенными символами, а мне нужно пропустить всю строку перед запрещенными символами.

1 Ответ

1 голос
/ 24 января 2020

Вы можете использовать

/(?<!\S)[A-Za-z]++(?![:;.])/

См. Демоверсию regex . Не используйте модификатор g, чтобы получить только первое совпадение.

Один из главных приемов здесь - это использовать присущий ++ квантификатор для сопоставления всех последовательных букв и проверьте :, ; или . только один раз сразу после последней из совпавших букв.

Детали шаблона

  • (?<!\S) - либо пробел, либо начало строки должны предшествовать текущему местоположению
  • [A-Za-z]++ - 1+ букв совпало, не позволяя вернуться к шаблону
  • (?![:;.]) - отрицательный прогноз, который не дает результата совпадать, если справа от текущего местоположения есть ;, : или ..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...