2014-10-02 3 views
1

Я пытаюсь соответствовать следующие строки:Regex чтобы соответствовать обратный слеш внутри строки

  • this\test_
  • _thistes\t
  • _t\histest

Другими словами, разрешенные строки имеют ТОЛЬКО обратная косая черта, разделяющая 2 подстроки, которые могут содержать числа, буквы и _ символы.

Я попробовал следующее регулярное выражение, тестирование его на http://regexhero.net/tester/: ^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$

К сожалению, она признает также следующие не разрешенные строки:

  • this\\
  • _\
  • _\w\s\x

Любая помощь пожалуйста?

ответ

1

Ваше регулярное выражение может означать две вещи, в зависимости от того, объявляете ли вы это как необработанную строку или как обычную строку.

Использование:

"^[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_]+$" 

(без замещения обратной косой черты не выполняется, поэтому регулярное выражение двигатель напрямую интерпретирует сбежавшего обратный слэш)

Обратите внимание, что я добавил число в первом классе символов, чтобы позволить ему соответствовать номера, как вы просили и добавил + квантор, чтобы позволить ему сопоставить более одного символа перед обратной косой чертой.

+0

Спасибо за ответ, это кажется самым полным между другими. Мне нужно было изменить регулярное выражение на следующий, чтобы соответствовать тому, что символ «\» необязателен: ^ [a-zA-Z0-9 _] + \\? [A-zA-Z0-9 _] + $ Я обнаружил, что 1 символьная строка не соответствует (например: «a», «b», «9» и т. Д. Не распознаются). Зачем? Можно ли это исправить? – Zanzi

+0

Да, это !!! ^ [a-zA-Z0-9 _] + \\? [A-zA-Z0-9 _] * $ Еще раз спасибо – Zanzi

+0

@ Zanzi Извините, что не отвечал ранее. Я застрял с большой задачей: s Если вы хотите избежать соответствия \, вы можете использовать это вместо: '@"^[a-zA-Z0-9 _] + (?: \\ [a-zA -Z0-9 _] + $)? "' – Jerry

1

Не производите, пожалуйста, \. В приведенном ниже регулярном выражении не будет разрешено двух или более \ обратных косых черт и утверждает, что перед и после символа \ должен присутствовать как минимум один символ слова.

@"^\w+\\\w+$" 

ИЛИ

@"^[A-Za-z0-9_]+\\[A-Za-z0-9_]+$" 

DEMO

+1

errr ... '\ w' означает намного больше, чем это. как я понимаю. «Символ слова. Символ во входной строке может принадлежать любой из категорий Юникода, которые подходят для символов в словах. Для получения дополнительной информации см.« Символ слов ». - http://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx. Лучший пример - ваш будет соответствовать акцентированным символам и тому подобным, в то время как оригинал не будет. (обратите внимание, что демонстрационный сайт, который вы опубликовали, не выполняет сопоставление C# regex). – Chris

+0

Вы добавили сырьё после прочтения моего ответа =/ – Jerry

+0

Я думал, что регулярное выражение C# обычно помещается в стенографическую строку. Поэтому я отправил только регулярное выражение.Для более подробного описания я помещаю их в '@" "' –

0

Довольно уверен, что это должно работать, если я понял все, что вы хотели.

^([a-zA-Z0-9_]+\\[a-zA-Z0-9_]+) 
+0

Вы хотите привязать это к началу и концу строки, чтобы убедиться, что вы не просто соглашаетесь с подстрокой тестируемой строки. – Chris

0

Лучший способ исправить ваше регулярное выражение выглядит следующим образом:

^[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

, как вы может видеть, что у нас есть одна и та же модель раньше и af (так как вы указали, что оба должны быть буквами, цифрами и символами подчеркивания) с модификатором +, означающим хотя бы один. Тогда в середине есть только обратная косая черта, которая является обязательной.

Поскольку неясно, означали ли вы «буквы», что вы означали основной алфавит, или если вы имели в виду что-либо, что соответствует букве (наиболее явно акцентированные символы, а также любой другой алфавит и т. Д.), Тогда вы можете набор символов, используя что-то вроде \w, как предлагает Авинаш Радж. См. http://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx#WordCharacter для получения дополнительной информации о том, что охватывает «символ слова».

Смежные вопросы