如果我有以下文字...
The quick :brown:fox: jumped over the lazy :dog:.
我想要一个正则表达式来捕获2个:
个字符之间的所有单词。在上面的示例中,它应该返回:brown:
,:fox:
,:dog:
。
到目前为止,我有这个(\:{1}.\w*\s*\:{1})
,它返回:brown:
和:dog:
。我不太清楚如何在两个匹配的组之间共享 :
,以便它也将返回':fox:'
。
答案 0 :(得分:2)
这是一个可以工作的简单模式:
(?<=:)(\w+)(?=:)
这使用环顾四周来确保一个或多个单词字符前后用冒号括起来。查看下面的演示以查看其工作原理。
该匹配项将成为第一个捕获组。实际上,它也应该作为整个比赛本身可用,因为环顾四周不会消耗任何东西。
我喜欢上面的环顾四周方法,因为它干净简洁(至少在我看来)。如果由于某种原因您不希望任何环顾四周,请使用以下模式:
:(\w+):
但是请注意,现在您必须显式地访问第一个捕获组才能获得匹配的单词,而在单词的两边都没有冒号。