如何使用REGEX捕获所需的组

时间:2015-09-19 01:06:29

标签: regex

我怎样才能打破这个字符串,只是捕获巧克力蛋糕&坚果?

输入字符串

披萨&焦炭>糖果>巧克力蛋糕&坚果>

我正在使用这个正则表达式:

.*[\>]\s(.*)

然而,它正在捕捉巧克力蛋糕&坚果> 如何删除>和最后的空间?

期望的结果 lastone =巧克力蛋糕&坚果

2 个答案:

答案 0 :(得分:2)

尝试移出> ().*[\>]\s(.*?)\s*>

或更精确的版本[>\s]+(\w+[\w ]*&[ \w]*\w+)[> ]+

DEMO

答案 1 :(得分:2)

避免捕捉最后一个短语周围的空间有点棘手。在Java中,

.*>\s*(\S+(?:\s+[^>\s]+)*)\s*>.*

捕获除最后两个>之间的初始和结束空白之外的所有内容。请注意,您只能在>之间获得最后的内容,因为*是"贪婪。"它匹配允许其余正则表达式匹配的最长字符串。

请注意,当您询问正则表达式时,您需要指定您正在使用的正则表达式引擎。

编辑:工作原理

.*>匹配>后跟的所有内容。然后\s*匹配0个或更多的空白字符,并开始捕获。 \S+匹配一个或多个非空格字符,(?:\s+[^>\s]+)*匹配0个或更多个空格重复,后跟除>和空格之外的任何字符(这是棘手的部分),然后捕获停止。 (?: )括号的形式是非捕获的。它们只对内部的内容进行分组,因此*可以匹配0或更多内容。最后,\s*>.*匹配可选空格前面的最后>,后跟任何内容。