我有N个关键字,key1
key2
... keyN
。
我有3个匹配关键字的模式。 (为了简化问题,我只使用key1
而不是真正的关键字)
/keyword
{keyword}
(keyword)
我决定只使用正则表达式找到匹配模式:
我写的模式:
(?:/)(key1|key2|key3)|(?:{)(key1|key2|key3)(?:})|(?:\()(key1|key2|key3)(?:\))
但是对于关键字(key1|key2|key3
),我需要写3次,我也有3组(为了获得最佳结果,应该减少到1)。
如何在Java或标准正则表达式中实现此目的?
答案 0 :(得分:0)
有可能(如果我没有错过任何边缘情况),但可能有点麻烦。
你可以试试这个正则表达式:
"([{/(])(aaa|bbb|ccc)((?<=/(aaa|bbb|ccc))|(?<=\\((aaa|bbb|ccc))\\)|(?<=\\{(aaa|bbb|ccc))\\})"
([{/(])
匹配/
,(
,{
(aaa|bbb|ccc)
与您的密钥(第2组)匹配(?<=/(aaa|bbb|ccc))
没有任何匹配,但有一个lookbehind,确保/
在开头
(?<=\\((aaa|bbb|ccc))\\)
匹配)
,并且通过lookbehind确保(
位于开头(?<=\\{(aaa|bbb|ccc))\\}
匹配}
,并且通过lookbehind确保{
位于开头使用此问题的信息:Backreferences in lookbehind 你可以试试这个正则表达式而无需重复:
"([{/(])(aaa|bbb|ccc)((?<=(?=/\\2).{1,4})|(?<=(?=\\(\\2).{1,4})\\)|(?<=(?=\\{\\2).{1,4})\\})"
其中.{1,4}
应该与您的密钥匹配所需的时间