目前我使用此注册表:
"\bI([ ]{1,2})([a-zA-Z]|\d){2,13}\b"
我刚才注意到我使用它的文本可能包含“\
”(反斜杠)。如何将其添加到表达式?
答案 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\\]|$)/