我想在我的代碼中找到單詞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