#regex #regular-language
#регулярное выражение #обычный язык
Вопрос:
Я нашел множество вопросов, касающихся «сопоставления всех слов, кроме одного слова в строке». Однако ни один из них не работает в случае фразы (два или более слов вместе взятых). Предположим, у меня есть строка, как в примере (регулярное выражение). Я хочу сопоставить все возможные комбинации из одного слова 10-значный номер, за исключением определенной комбинации / фразы «nip 10-значный номер» ( означает простой пробел). В моем примере я использую bnips*d{10}b
для сопоставления «nip 10-значный номер», но я хочу сопоставить все, кроме «nip 10-значный номер». hello
также не должно совпадать из-за отсутствия 10-значного номера с правой стороны. Буду признателен за любую помощь.
Пример:
hello
alpha 1111111111 # should be matched
allla 2322322321 # should be matched
nip 5260305006
pin 5260305006 # should be matched
nipp 5260305006 # should be matched
Комментарии:
1.Нравится это?
b(?!nipb)S s*d{10}b
regex101.com/r/dJwTrJ/12. Спасибо, это решение, которое я искал. Я использовал
b(?!nip)s*d{10}b
, но это не сработало. Не могли бы вы объяснить, для чего выS
добавляете?3. Он сопоставляет 1 или более символов без пробелов, прежде чем сопоставлять необязательные символы с пробелами. Я добавил его в качестве ответа с объяснением.
Ответ №1:
Вы можете использовать
b(?!nipb)S s*d{10}b
Объяснение
b(?!nipb)
Граница слова, утверждает, что то, что находится прямо справа, неnip
является границей словаS s*
Сопоставьте 1 символы без пробелов, за которыми следуют необязательные символы с пробелами (или используйтеw
вместоS
, чтобы сопоставлять только символы слов)d{10}b
Сопоставьте 10 цифр, за которыми следует граница слова
Демонстрация регулярных выражений
Если вы хотите want to match all possible combination of a single word 10-digits
и не хотите сопоставлять nip 10-digits number" ( means a simple space)
, вы можете исключить это из сопоставления, включая пробел и 10 цифр.
Обратите внимание, что это соответствует nip5260305006
, поскольку между ними нет пробела.
b(?!nip d{10}b)S s*d{10}b