В приведенных ниже пунктах я хочу обнаруживать только правильные элементы с регулярным выражением.
Пробел в слове означает недопустимый, знак # означает недопустимый, Начальное слово с номером недопустимо.
Invalid : M_123 ASD
Invalid : M_123#ASD
Invalid : 1_M# ADD
Valid : M_125ASD
Valid : M_125$ASD
Я пытаюсь, как показано ниже:
[A-Za-z0-9_$]
Не работает правильно. Мне нужно установить как действительные, так и недействительные наборы для слова.
Могу ли я сделать совпадение с регулярным выражением?
Ваше регулярное выражение [A-Za-z0-9_$]
представляет класс символов, который соответствует одному символу, который является либо буквой ASCII, либо цифрой, либо _
или же $
символы. Если вы используете его с std::regex_match
, это будет соответствовать только целая строка он состоит только из одного символа, так как шаблон по умолчанию привязывается при использовании с этим методом. Если вы используете его с std::regex_search
Строка типа ([_])
пройдет, так как регулярное выражение не привязанного и может найти частичный Матчи.
Чтобы соответствовать 0 или более символов, необходимо добавить *
квантификатор после вашего класса. Чтобы соответствовать одному или нескольким символам, необходимо добавить +
квантификатор после вашего класса персонажа. Однако у вас есть дополнительное ограничение: цифра не может появляться в начале.
Кажется, вы можете использовать
^[A-Za-z][A-Za-z0-9_$]*$
Увидеть regex demo at regex101.com.
подробности:
^
— начало строки[A-Za-z]
— письмо ASCII (ровно одно вхождение)[A-Za-z0-9_$]*
— 0+ букв ASCII, цифры, _
или же $
$
конец строки привязки.Обратите внимание, что с regex_match
, вы можете опустить ^
а также $
якоря.
Итак, требования
не может начинаться с числа (я предполагаю, что это начинается с алфавита)
не может содержать пробел или #
все остальные символы действительны
Вы можете попробовать это регулярное выражение ^[a-zA-Z]((?![\# ]).)+?$
^[a-zA-Z]
проверяет алфавит в начале строки
((?![\# ]).)+?$
проверяет, нет ли #
или же space
в оставшейся части линии.
Онлайн демо Вот
РЕДАКТИРОВАТЬ
Согласно комментарию Виктора, регулярное выражение может быть упрощено до ^[a-zA-Z][^# ]+$
,