Я пытаюсь сопоставить следующие строки:
this\test_
_thistes\t
_t\histest
Другими словами, допустимые строки имеют ТОЛЬКО обратную косую черту, разделяя 2 подстроки, которые могут содержать числа, буквы и _ символы.
Я попробовал следующее регулярное выражение, ^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$
его на http://regexhero.net/tester/: ^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$
К сожалению, он также распознает следующие недопустимые строки:
this\\
_\
_\w\s\x
Любая помощь, пожалуйста?
Ваше регулярное выражение может означать две вещи, в зависимости от того, объявляете ли вы это как необработанную строку или как обычную строку.
С помощью:
"^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$"
Не будет соответствовать ни одному из ваших тестовых примеров, так как это будет соответствовать:
^
начало строки,[a-zA-Z_]
1 альфа-символ или символ подчеркивания,[\\\]?
1 необязательная обратная косая черта,[a-zA-Z0-9_]+
не менее 1 буквенно-цифровой и/или символ подчеркивания,$
end of string Если вы используете его как необработанную строку (как это интерпретирует его regexhero и обозначается знаком @
до начала строки):
@"^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$"
^
начало строки,[a-zA-Z_]
1 альфа-символ или символ подчеркивания,[\\\]?[a-zA-Z0-9_]+
один или несколько символов; обратная косая черта, ]
?
, буквенно-цифровой и подчеркивающий,$
end of string.Так что вам действительно нужно:
"^[a-zA-Z0-9_]+\\\\[a-zA-Z0-9_]+$"
(Две пары обратных косых черт становятся двумя буквальными обратными косыми чертами, которые будут интерпретироваться с помощью механизма регулярных выражений как скрытая обратная косая черта, следовательно, 1 буквальная обратная косая черта)
Или
@"^[a-zA-Z0-9_]+\\[a-zA-Z0-9_]+$"
(Не выполняется подстановка обратной косой черты, поэтому механизм регулярных выражений напрямую интерпретирует скрытую обратную косую черту)
Обратите внимание, что я добавил числа в первом классе символов, чтобы позволить ему сопоставлять числа, как вы просили, и добавил квант +
чтобы он мог сопоставлять более одного символа перед обратным слэшем.
Не делайте \
как необязательный. В приведенном ниже регулярном выражении не будет допускаться два или более \
обратных косых черт и утверждает, что должен быть как минимум один символ слова, присутствующий до и после символа \
.
@"^\w+\\\w+$"
ИЛИ
@"^[A-Za-z0-9_]+\\[A-Za-z0-9_]+$"
\w
значит намного больше. как я понимаю. «Символ слова. Символ во входной строке может принадлежать к любой из категорий Unicode, которые подходят для символов в словах. Для получения дополнительной информации см. Символ слова». - msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx . Лучший пример - ваш будет соответствовать символам с акцентом и тому подобное, тогда как оригинал не будет. (Следует отметить, что размещенный вами демонстрационный сайт не выполняет сопоставление с регулярным выражением c #).
Лучший способ исправить ваше регулярное выражение:
^[a-zA-Z0-9_]+\\[a-zA-Z0-9_]+$
Это сводится к:
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
[a-zA-Z0-9_]+ any character of: 'a' to 'z', 'A' to 'Z',
'0' to '9', '_' (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\\ '\'
--------------------------------------------------------------------------------
[a-zA-Z0-9_]+ any character of: 'a' to 'z', 'A' to 'Z',
'0' to '9', '_' (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
Пояснение любезно предоставлено http://rick.measham.id.au/paste/explain.pl
Как вы можете видеть, у нас есть один и тот же шаблон до и после обратной косой черты (поскольку вы указали, что оба должны быть буквами, цифрами и символами подчеркивания) с модификатором +, означающим хотя бы один. Тогда в середине есть только обратная косая черта, которая является обязательной.
Поскольку неясно, означали ли вы "буквы" основной алфавит, или если вы имели в виду что-либо, что соответствует букве (наиболее явно акцентированные символы, а также любой другой алфавит и т.д.), Тогда вы можете расширить свой набор символов на используя что-то вроде \w
как предлагает Авинаш Радж. См. Http://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx#WordCharacter для получения дополнительной информации о том, что охватывает "символ слова".
Довольно уверен, что это сработает, если я все понял.
^([a-zA-Z0-9_]+\\[a-zA-Z0-9_]+)