Ваше регулярное выражение может означать две вещи, в зависимости от того, объявляете ли вы это как необработанную строку или как обычную строку.
Использование:
"^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$"
Не соответствует ни одному из ваших тестовых примеров, так как это будет соответствовать, по порядку:
^
начало строки,
[a-zA-Z_]
1 альфа-символ или знак подчеркивания ,
[\\\]?
1 необязательная обратная косая черта,
[a-zA-Z0-9_]+
по меньшей мере, 1 буквенно-цифровой и/или символы подчеркивания,
$
конец строки
Если вы используете его в качестве сырья строку (которая, как regexhero интерпретировать его и указывает @
знак перед строкой начинается) является:
@"^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$"
^
начало строки,
[a-zA-Z_]
1 символ альфа или символ подчеркивания,
[\\\]?[a-zA-Z0-9_]+
один или несколько символов; обратная косая черта, ]
, ?
, алфавитно-цифровые и подчеркивающие,
$
конец строки.
Так что вам действительно нужно либо:
"^[a-zA-Z0-9_]+\\\\[a-zA-Z0-9_]+$"
(две пара обратных косых черт стали два буквальными обратными косыми, которые будут интерпретированы в регулярных выражениях, как беглые обратная косые черты, следовательно, 1 буквальных обратная косая черта)
Или
@"^[a-zA-Z0-9_]+\\[a-zA-Z0-9_]+$"
(без замещения обратной косой черты не выполняется, поэтому регулярное выражение двигатель напрямую интерпретирует сбежавшего обратный слэш)
Обратите внимание, что я добавил число в первом классе символов, чтобы позволить ему соответствовать номера, как вы просили и добавил +
квантор, чтобы позволить ему сопоставить более одного символа перед обратной косой чертой.
Спасибо за ответ, это кажется самым полным между другими. Мне нужно было изменить регулярное выражение на следующий, чтобы соответствовать тому, что символ «\» необязателен: ^ [a-zA-Z0-9 _] + \\? [A-zA-Z0-9 _] + $ Я обнаружил, что 1 символьная строка не соответствует (например: «a», «b», «9» и т. Д. Не распознаются). Зачем? Можно ли это исправить? – Zanzi
Да, это !!! ^ [a-zA-Z0-9 _] + \\? [A-zA-Z0-9 _] * $ Еще раз спасибо – Zanzi
@ Zanzi Извините, что не отвечал ранее. Я застрял с большой задачей: s Если вы хотите избежать соответствия \, вы можете использовать это вместо: '@"^[a-zA-Z0-9 _] + (?: \\ [a-zA -Z0-9 _] + $)? "' – Jerry