Есть три вещи неправильно с тем, что вы написали.
Во-первых, чтобы отрицать класс персонажа, вы ставите внутри скобки, а не перед ними. ^[0-9]
означает «любая цифра, в начале строки»; [^0-9]
означает «ничего, кроме цифры».
Во-вторых, [^0-9]
будет соответствовать что-нибудь Это не цифра, не только буквы и символы подчеркивания. Вы действительно хотите сказать, что первый символ «не цифра, а цифра, буква или знак подчеркивания», правильно? Хотя это не невозможно сказать, что гораздо проще просто объединить это в «буква или знак подчеркивания».
Кроме того, вы забыли повторить последний набор символов. Как есть, вы точно соответствуете двум символам, поэтому b1
будет работать, но b12
не будет.
Итак:
[a-zA-Z_][a-zA-Z0-9_]*
Debuggex Demo
В других словах: одна буква или знак подчеркивания, за которым следуют ноль или более букв, цифр или символов подчеркивания.
Я не совсем уверен, что это то, что вы на самом деле хотите, по крайней мере, если регулярное выражение является вашим парсером. Например, в foo-bar
, хотите ли вы получить соответствие bar
? Если да, то в 123spam
вы хотите, чтобы spam
соответствовал? Но это то, что вы пытались написать.
ли вы имеете в виду, начиная с начала строки? –