需要在此正则表达式中测试“\\”(反斜杠)

时间:2008-12-10 00:23:10

标签: regex

目前我使用此注册表:

"\bI([ ]{1,2})([a-zA-Z]|\d){2,13}\b"

我刚才注意到我使用它的文本可能包含“\”(反斜杠)。如何将其添加到表达式?

4 个答案:

答案 0 :(得分:2)

|\\之后,在组内添加\d

答案 1 :(得分:1)

如果您还允许第二个捕获寄存器中的下划线字符,并且您愿意使用元字符,则可以简化此表达式。这改变了这个:

([a-zA-Z]|\d){2,13}

进入这个...

([\w]{2,13})

你还可以用这个...来添加反斜杠字符的测试。

([\w\x5c]{2,13})

这使得正则表达式更容易引人注目,具体取决于您的个人喜好。

"\bI([\x20]{1,2})([\w\x5c]{2,13})\b"

另见:

答案 2 :(得分:0)

@ slavy13和@dreftymac都为您提供了指针的基本解决方案,但是......

  • 您可以在字符类中使用\d来表示数字。
  • 您不需要在字符类中添加空格以匹配它(除非为了清晰起见,否则可能存在争议)。
  • 您可以在字符类中使用[:alpha:]表示字母字符,[:digit:]表示数字,[:alnum:]表示字母数字(特别是不包括下划线,与{{{ 1}})。请注意,这些字符类可能意味着比预期更多的字符;想想重音字符和非阿拉伯数字,特别是在Unicode中。
  • 如果要在空格后捕获整个信息,则需要在捕获括号内重复。

对比这两个单行的行为:

\w

给定输入行“perl -n -e 'print "$2\n" if m/\bI( {1,2})([a-zA-Z\d\\]){2,13}\b/' perl -n -e 'print "$2\n" if m/\bI( {1,2})([a-zA-Z\d\\]{2,13})\b/' ”,第一行打印“3”,第二行打印“a123”。显然,如果您想要的只是字符串第二部分的最后一个字符,那么原始表达式就可以了。但是,这不太可能是要求。 (显然,如果你只对整个版本感兴趣,那么使用'I a123'会给你匹配的文字,但它会产生负效率。)

我可能会使用这个正则表达式,因为它似乎对我来说最清楚:

$&

强制性插件的时间:阅读Jeff Friedl的“Mastering Regular Expressions”。

答案 3 :(得分:0)

正如我在评论slavy的帖子中指出的,\\ - > \b作为反斜杠不是单词字符。所以我的建议是

/\bI([ ]{1,2})([\p{IsAlnum}\\]{2,13})(?:[^\w\\]|$)/ 

我认为你想捕捉整个2-13个字符,而不仅仅是第一个适用的字符,所以我调整了我的RE。

如果引擎支持它并且您不想使用它,则可以使最后一次捕获成为预测。那看起来像是:

/\bI([ ]{1,2})([\p{IsAlnum}\\]{2,13})(?=[^\w\\]|$)/