正则表达式应该应用于以下字符串:
[Product].[Product Catalog].[Product].&[50]&[53]&[DE]&[1ST_HQ]&[50_54_36]
的As-Is:
应用以下正则表达式:
(?:&\[).+(?:\])
返回:
&[50]&[53]&[DE]&[1ST_HQ]&[50_54_36]
待:
我想更改该正则表达式以返回
&[50_54_36]
只。 有什么想法吗?
答案 0 :(得分:4)
如果要提取最后一个元素,可以简单地使用字符串$
锚点的结尾。不需要为这些字符实现非捕获组,因此您也可以删除组。
&\[[^]]+]$
<强>解释强>
& # '&'
\[ # '['
[^]]+ # any character except: ']' (1 or more times)
] # ']'
$ # before an optional \n, and the end of the string
或者,我建议使用捕获组来匹配并捕获匹配结果。这里的.*
会占用所有字符,直到最后一次出现&[
。然后,您可以参考群组#1
进行匹配。
.*(&\[[^]]+])
答案 1 :(得分:2)
答案 2 :(得分:1)
如果您正在使用PCRE(或Ruby),则可以执行点匹配全部,然后回溯到&[...]
的最后一个匹配项。使用\K
:
.*\K(?:&\[).+(?:\])
对于不支持\K
的引擎,您可以使用重复的捕获组。这需要您使用.+
将?
变为懒惰重复。捕获组将包含捕获的最后一个实例的内容。这将匹配&[50]&[53]&[DE]&[1ST_HQ]&[50_54_36]
,但捕获组1将等于&[50_54_36]
:
((?:&\[).+?(?:\]))+
答案 3 :(得分:1)