0
A
回答
3
不要試圖對濫用正則表達式的一切。
通過設計,正則表達式旨在不支持計數。原因很簡單:如果你想要這樣做,至少需要一種2型語言,而處理比3型(「常規」)語言更加複雜。
請參見維基百科的細節:https://en.wikipedia.org/wiki/Chomsky_hierarchy
因此,通過定義,一旦你完全支持計數,它可能不再是一個普通的語言。
有擴展名,例如perl擴展正則表達式,可以解決這個問題。但實質上,它們不再是正則表達式,而是調用一個外部函數來完成這項工作。
以下perl的擴展正則表達式應該做你想要什麼:
s/(-?\d+)/$1 + 1/eg
但實質上,只有匹配的部分是一個正則表達式,置換的Perl,所以圖靈完備。 e
標誌表示正確的部分應該由Perl評估,而不是正則表達式替換字符串。
你當然可以在任何其他正則表達式引擎中做這個技巧。匹配,然後計算增量,然後用新值替換匹配。
完整的perl濾波器演示:
> echo 'Test 123 test 0 Banana9 -17 3 route66' | perl -pe 's/(-?\d+)/$1+1/eg'
Test 124 test 1 Banana10 -16 4 route67
的p
標誌使perl的讀標準輸入和程序應用到每個行,然後輸出結果。這就是爲什麼實際腳本只包含替換。這就是Perl對於unix腳本非常流行的原因。您甚至可以將此過濾器批量應用於一整套文件(請參閱-i
進行就地修改,以及perlrun
手冊頁)。因此,爲了修改整套文件的到位(備份將與.bak
後綴):
perl -p -i .bak -e 's/(-?\d+)/$1+1/eg' <filenames>
相關問題
- 1. vim正則表達式增加所有數字1
- 2. MongoDB的正則表達式搜索的整數值與PHP
- 3. 不工作正則表達式-1或正整數的檢測
- 4. 正則表達式值1-16384
- 5. 加入3個正則表達式1
- 6. awk正則表達式並添加1
- 7. 數值正則表達式
- 8. 使用正則表達式匹配增量整數列表
- 9. 正則表達式1
- 10. 正則表達式(正則表達式)對於增量
- 11. 正則表達式正則表達式返回的值正則表達式
- 12. 正則表達式與完整文本
- 13. 正則表達式數值範圍1 - 1百萬
- 14. Ruby整數的正則表達式
- 15. 整數的C#正則表達式
- 16. Ruby的正則表達式整數
- 17. 正則表達式爲數字1-25
- 18. 正則表達式正則表達式正則表達式使用正則表達式,但不是與Python
- 19. 追加值的正則表達式
- 20. 調整正則表達式包括0-100 - 正則表達式貨幣值
- 21. 正則表達式替換「1-3」與「從1到3」格式
- 22. 正則表達式的值= 「...」
- 23. 增量式正則表達式filterer
- 24. JMeter的正則表達式與正則表達式測試儀
- 25. 與正則表達式匹配的正則表達式
- 26. Mysql的正則表達式:匹配與正則表達式
- 27. Java正則表達式組與。* vs正常正則表達式
- 28. 選擇正則表達式的正則表達式中間值
- 29. 正則表達式 - 表達式$ {值}
- 30. 整數或雙正則表達式
感謝您對這樣的事事。 – SemihY