【发布时间】:2019-02-21 05:46:45
【问题描述】:
在正则表达式 OR 中,当有多个输入具有公共前缀时,正则表达式将匹配 Regex OR 中的第一个输入,而不是最长匹配。
例如,对于正则表达式 regex = (KA|KARNATAKA) 和 input = KARNATAKA,输出将是 2 个匹配 match1 =KA 和 match2 = KA。
但我想要的是在Regex OR 中的给定输入中完成最长可能匹配,在我给定的示例中为match1 = KARNATAKA。
Here is the example in a regex client
所以我现在正在做的是,我按长度降序对Regex OR 中的输入进行排序。
我的问题是,我们可以在正则表达式本身中指定匹配最长的字符串吗?还是排序是唯一的方法?
I have already refered this question and I don't see a solution other than sorting
【问题讨论】:
-
试试这个\b(KA|KARNATAKA)\b
-
@SHAHAKASH 如果他想匹配
KARNA怎么办。您的解决方案\b(KA|KARNA)\b在那里不起作用 -
是什么问题阻止您进行排序?
-
@Jai 当输入非常少或者是一次性工作时,对输入进行排序是没有问题的。当我们有大量输入并且我们必须一次又一次地动态地进行时,就会出现性能问题。我只是想知道我们是否可以让
Regex engine处理这个问题。 -
尝试使用单词边界
\b,(\bKA\b|\bKARNATAKA\b)会起作用
标签: java regex regex-greedy