Java正则表达式太长了?

时间:2017-09-05 12:14:00

标签: java regex

我有这个正则表达式比平时稍长。我尝试在文本文档中捕获一些值。

\\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',它就会停止工作。

现在我忽略了某些群体被错误填补。

出了什么问题?

1 个答案:

答案 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 作为其正则表达式引擎根本不支持内联修饰符。