正则表达式匹配字符串中的反斜杠

时间:2014-10-02 10:25:30

标签: c# regex

我正在尝试匹配以下字符串:

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

换句话说,允许的字符串只有一个反斜杠,分割2个子字符串,可以包含数字,字母和_字符。

我尝试了以下正则表达式,在http://regexhero.net/tester/上测试它: ^[a-zA-Z_][\\\]?[a-zA-Z0-9_]+$

不幸的是,它还识别以下不允许的字符串:

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

请帮忙吗?

4 个答案:

答案 0 :(得分:1)

不要将\作为可选项。以下正则表达式不允许两个或更多\反斜杠,并断言在\符号之前和之后必须至少存在一个单词字符。

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

OR

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

DEMO

答案 1 :(得分:0)

如果我理解你想要的一切,我相信这应该有用。

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

答案 2 :(得分: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提供的解释

正如您所看到的,我们在反斜杠之前和之后具有相同的模式(因为您指出它们应该是字母,数字和下划线),+修饰符意味着至少有一个。然后在中间只有强制反斜杠。

由于目前还不清楚你是否说过"字母"你的意思是基本的字母表,或者如果你的意思是任何字母(最明显的重音字符,还有任何其他字母等),那么你可能希望通过使用\w之类的东西来扩展你的字符集作为Avinash Raj提示。有关"字符"的更多信息,请参阅http://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx#WordCharacter。覆盖。

答案 3 :(得分:0)

你的正则表达式可能意味着两件事,这取决于你是将它声明为原始字符串还是普通字符串。

使用:

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

(没有执行反斜杠替换,因此正则表达式引擎直接解释转义的反斜杠)

请注意,我在第一个字符类中添加了数字,以允许它匹配您请求的数字,并添加+量词,以允许它在反斜杠之前匹配多个字符。