我有这个正则表达式比平时稍长。我尝试在文本文档中捕获一些值。
\\n*.*(k\\s=\\s\\d)(.|\\n)*?estimate\\s.*\\n*\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s+
在regexr.com link
上完全正常但在Java中只有这部分可以使用
\\n*.*(k\\s=\\s\\d)(.|\\n)*?estimat
一旦我添加了缺失的'e',它就会停止工作。
现在我忽略了某些群体被错误填补。
出了什么问题?
答案 0 :(得分:3)
(.|\\n)*?
使正则表达式引擎执行太多冗余的回溯步骤。您需要使用(?s:.*?)
替换模式中的所有此类部分,(.|\n)*?
是一个与任何0+字符匹配的修饰符组,包括换行符。由于没有交替,这里没有多余的回溯。
请注意,在JavaScript中(因为您正在regexr.com上测试仅支持JavaScript正则表达式的模式),[^]*?
应替换为[\s\S]*?
或getTextCommands () {
args=(
-pointsize "$2"
-font "$HOME/Library/Fonts/$1.ttf"
-background black
-fill red
-stroke blue
"label:$3"
-gravity center
-composite
)
}
getTextCommands "Droid Sans" 40 "Foo Bar"
convert input.png "${args[@]}" output.png
作为其正则表达式引擎根本不支持内联修饰符。