Регулярное выражение для сопоставления чисел только при наличии алфавитов
Мне требуется регулярное выражение для соответствия строке следующим образом:
-
#1234abc
: Должно совпадать -
#abc123
: Должно совпадать -
#123abc123
: Должно совпадать -
#123
: Должно ли не совпадать -
#123_
: Должно ли не совпадать -
#123abc_
: Должно совпадать
Это означает, что он должен получить только соответствует, если строка содержит цифры или подчеркивание вместе с алфавитами. Только цифры/подчеркивание не должны совпадать. Любые другие специальные символы также не должны совпадать.
Это регулярное выражение в основном предназначено для получения хэштегов из строки. Я уже пробовал следующее, но это не сработало для меня хорошо.
preg_match_all('/(?:^|\s)#([a-zA-Z0-9_]+$)/', $text, $matches);
Пожалуйста, предложите что-нибудь.
3 answers
Если вам нужно сопоставить хэштеги в формате, указанном в строке большего размера, используйте
(?<!\S)#\w*[a-zA-Z]\w*
Смотрите демонстрацию регулярного выражения
Подробности:
-
(?<!\S)
- должно быть начало строки или пробел перед -
#
- хэш-символ -
\w*
- 0+ символов слов (то есть букв, цифр или подчеркивания) -
[a-zA-Z]
- буква (вместо нее можно использовать\p{L}
) -
\w*
- 0+ символов слов.
Другое альтернативы (которые могут показаться более быстрыми, но немного более сложными):
(?<!\S)#(?![0-9_]+\b)\w+
(?<!\S)#(?=\w*[a-zA-Z])\w+
Дело в том, что шаблон в основном соответствует символам 1+ слов, которым предшествует #
, который находится либо в начале строки, либо после пробела, но (?![0-9_]+\b)
отрицательный внешний вид не соответствует всем совпадениям, где часть после #
состоит из цифр/подчеркиваний, а положительный внешний вид (?=\w*[a-zA-Z])
требует, чтобы после символов 0+ слов было не менее 1 буквы ASCII.
Вы можете использовать это регулярное выражение:
((.*?(\d+)[a-zA-Z]+.*)|(.*[a-zA-Z]+(\d+).*)).
Доступ к нему здесь: http://regexr.com/3ef6q
Посмотрите, как это работает:
Сделайте:
^(?=.*[A-Za-z])[\w_]+$
[\w_]+
соответствует одной или нескольким буквам, цифрам,_
Шаблон с нулевой шириной,
(?=.*[A-Za-z])
, гарантирует, что совпадение содержит хотя бы одну букву