Регулярное выражение: соответствует слову, но без «алфавита» после него, кроме «s» - PullRequest
0 голосов
/ 23 февраля 2019

Строка, которую я хочу сопоставить, не должна иметь следующую алфавитную букву, кроме 's', но она может иметь любую следующую цифру или символ.

Примечание : Любая буква алфавитаразрешено после строки, но должно иметь предшествующий пробел / символ.

Для корня msl,
Должно совпадать : msl, msls, msl123, msl123s, mslss, mslss xxx, x_msl, x_msl_x
Не должны совпадать : msled, mslsxxx, xmsl_x

 "msl" matches ".*" + "word_msl" + "(What Regex to put here?).*"

1 Ответ

0 голосов
/ 24 февраля 2019

[ Вопрос изначально содержал в качестве тега ]

my $root = "msl";

/
   (?<![^\s_])                    # At the start of a "word" or after a "_"
   \Q$root\E                      # Match the value of $root literally
   (?: \S* s                      # Non-whitespace characters ending with "s", or
   |   [^\ss]*                    # Non-whitespace, non-"s" characters
   )
   (?!\S)                         # At the end of a "word"
/x

Оптимизировано:

my $root = "msl";

/
   (?<![^\s_])                    # At the start of a "word" or after a "_"
   \Q$root\E                      # Match the value of $root literally
   [^\ss]*+                       # Non-whitespace, non-"s" characters
   (?: s (?: [^\ss]*+ s )*+ )?+   # Optionally, non-whitespace characters ending with "s"
   (?!\S)                         # At the end of a "word"
/x

В этом случае«слово» считается последовательностью непробельных символов, разделенных пробелом, началом строки и / или концом строки.

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