java正则表达式查找用空格分隔的单词,回溯
我必须找到用空格隔开的单词。使用最小回溯的最佳实践是什么
我找到了这个解决方案:
Regex: \d+\s([a-zA-Z]+\\s{0,1}){1,} in a sentence
Input: 1234 this is words in a sentence
所以,this is words
-我必须使用regex([a-zA-Z]+\\s{0,1}){1,}
进行检查,而单词in a sentence
我必须使用regexin a sentences
中的常量单词进行检查
但在本例中,是regex101。com给我调试4156个步骤,这是灾难性的回溯。有办法避免吗
我还有另一个更复杂的例子,它需要86000个步骤,但无法验证
主要问题是,我必须找到所有用空格分隔的单词,但同时regex包含用空格分隔的单词(常量)。这就是我遭遇灾难性回溯的地方
我必须使用Java来完成这项工作
# 1 楼答案
如果我理解正确的话,你想匹配任何由空格分隔的单词加上句子“in a句子”
您可以尝试以下解决方案:
如regex101上的示例所示:Exemple
正则表达式按61个步骤匹配。 在“in a句子”之后,你可能会遇到标点问题。做一些测试
我希望我能帮上忙
# 2 楼答案
你想找到用
space
分隔的单词。所以你至少应该说1 or more space
。你可以使用这个,只需要37个步骤见演示
https://regex101.com/r/tD0dU9/4
对于java双转义所有ie
\d==\\d
# 3 楼答案
您可以尝试将字符串拆分为一个字符串数组,然后在删除数组中与您的单词定义不匹配的任何成员(例如空格或puncuation)后,找到数组的大小
mySplitString是从原始字符串中拆分出来的字符串数组。将删除所有空白字符,并将空白之前、之后或中间的子字符串放入新的字符串数组中。for循环在拆分字符串数组中运行,检查每个数组成员是否包含一个单词(至少一次字符或数字),并将其添加到总字数中