我想在我的代码中找到单词sprintf
。应该使用哪些Perl正则表达式? 有几行文字有sprintf_private
,我想排除,但只需要sprintf
。Perl正则表达式找到一个确切的单词
3
A
回答
21
您必须在写着边框\b
:
/\bsprintf\b/
6
如果你想找到的行sprintf
所有出现不包含sprintf_private
,你可能会使用一对正则表达式的:
while(my $line = <DATA>) {
next if $line =~ m/\bsprintf_private\b/;
while($line =~ m/\bsprintf\b/g) {
print "[sprintf] found on line $. at column $-[0]\n";
}
}
这首先拒绝包含sprintf_private
的任何行。然后对不包含该不合格者的线路进行扫描,查找所有出现的sprintf
。无论发现何处,都会打印一条消息,标识文件中的行和发现sprintf
的匹配的起始列。
$.
和@-
特殊变量在perlvar中描述。有关正则表达式的一些很好的阅读可以在perlrequick和perlretut中找到。第一个正则表达式非常简单;它只是使用零宽度断言来确保不合格子字符串在其每一侧都有一个字边界。第二个正则表达式使用相同的技术,但也适用于/g
修改器以迭代所有出现的sprintf
,以防万一每行出现多次出现。
零宽度断言\b
匹配\w\W
或\W\w
转换发生的任何地方。由于字符类别\w
包含所有字母字符(其中什么构成“全部”取决于您的unicode_strings
标志或/u
),加上下划线和数字数字(即任何字符在标识符中是允许的),您可能会发现\b
字边界太严格了。如果您发现“简单”的解决方案是太天真了一种方法,你可以多走一英里,真正缩小东西应该有资格作为一个单词边界通过使用正则表达式看起来像这样:
(?<!\p{Alpha})sprintf(?!\p{Alpha})
如果你选择走这条路线,解决方案应该是这样的:
while(my $line = <DATA>) {
next if $line =~ m/(?<!\p{Alpha})sprintf_private(?!\p{Alpha})/;
while($line =~ m/(?<!\p{Alpha})sprintf(?!\p{Alpha})/g) {
print "[sprintf] found on line $. at column $-[0]\n";
}
}
这使用了拒绝比赛零宽度负回顾后,零宽度负预测先行断言在字符立即向左或主子权是“阿尔法”字符,而不是使用稍微天真的\b
。
相关问题
- 1. Python正则表达式找到确切的单词
- 2. 正则表达式找到一个词
- 3. 正则表达式切换单词?
- 4. 正则表达式,找到匹配后的下一个单词
- 5. 查找单词的正则表达式
- 6. 正则表达式来找到一个单词,并用数字
- 7. 使用正则表达式找不到一个单词
- 8. 正则表达式可以找到单词的开始和下一个单词
- 9. mysql匹配正则表达式的确切单词?
- 10. 正则表达式确保单词GO
- 11. 正则表达式寻找单词
- 12. 替换多个正则表达式到perl的正则表达式的一个
- 13. 正则表达式到一个确切pettern一个字
- 14. 正则表达式否定预测 - 排除确切单词
- 15. Perl&Bash:找到正则表达式
- 16. 正则表达式设置单词字符和匹配确切的单词
- 17. 正则表达式找到一个正好包含3个单词的行
- 18. 正则表达式找出相差一个字母的单词
- 19. 正则表达式:单个单词
- 20. 正则表达式找到最后一个大写单词和另一个单词之间的单词
- 21. Perl正则表达式包含多个单词的匹配行
- 22. Perl的正则表达式否定多个单词
- 23. java的正则表达式来找到确切的词有特殊字符
- 24. 正则表达式如何找到之间的“确切的词和/
- 25. 正则表达式找到整个单词
- 26. 正则表达式找到3个重复单词
- 27. 正则表达式得到单词
- 28. 正则表达式的问题 - 找到确切的变量
- 29. 的Perl - 删除第一个词与正则表达式
- 30. 使用正则表达式找到一个匹配 - perl
我有兴趣以“这个答案没有用”的方式听到,以便我可以改进它或证明删除它。 – DavidO 2012-07-27 08:49:13
+1为您的非常好的解释。我想你可能已经被低估了,因为这个问题没有说*找到所有不包含snprint_private *的行上的sprintf,所以这可能被认为有点矫枉过正。 – simbabque 2012-07-27 12:30:34
@ - array的使用很好 – gaussblurinc 2012-07-27 13:21:45