我试图贪婪匹配字符串并将其标记为组,直到遇到空格短划线( - )。到目前为止,我已经:
^ *-{2}([\w\d-]+)(=([ \w\d-]+))?(.*)|(.+)
我的测试字符串是:
--match1=match2
--match1=match2 match2
--match1=match2 match2-match2
--mat-ch1=match2 match2
--match1=match2-match2 match2
--match1=match2 -lastmatch
--match1=match2 --lastmatch
--match1 -lastmatch
--match1 --lastmatch
lastormatch
如果每种匹配(match1
,match2
,lastmatch
,lastormatch
)彼此相邻,则应将它们组合在一起。除了6和7之外,这适用于每一行。基本上' -
'在match2
组时,它应该作为分隔符(-
包围的/w/d
可以作为字符串内部组的一部分。我知道,应该使用前瞻/后视,但我无法做到。
regex101.com
答案 0 :(得分:0)
不完全确定您要实现的目标,但要根据您的需求而定,"我需要的是什么"这可能就足够了:
px
接受^ *-{2}([\w\d-]+)(=(?:[\w\d-]| (?!-))+)?(.*)|(.+)
或未跟随的空格 - 而不是[\w\d-]
,它似乎适用于测试数据。
但如果不确切了解您的目标是什么,可能会出现不同数据集的问题。
答案 1 :(得分:0)
^ (?:--)([\w-]+)(?:=((?:[\w-]| \w)+))?|(.)正是我所需要的。 @trincot和@rvalvik的综合答案。