假设我有一个可能具有以下形式的字符串:
asdf - 10.0.0.1 [stuff] [xRelevantStuffx]
asdf [yRelevantStuffy] 10.0.0.1 [stuff] [xRelevantStuffx]
基本上在上述情况下,我要做的是有4个不同的组,每个组都将与以下各组匹配:
asdf
10.0.0.1
stuff
但是对于第2组,我希望它有所不同,具体取决于该hypen-
字符是否较早出现。如果确实显示,我想进行第2组比赛xRelevantStuffx
。但是,如果它是一个非连字符值,则我不在乎字符串后面要出现什么,并希望它与on匹配yRelevantStuffy
。
RegEx是否具有条件匹配的足够功能,以使我能够完全通过正则表达式来完成此任务,还是我将尝试在此处找到利用外部字符串操作/逻辑的其他解决方案?
您可以做的是捕获前瞻部分,并使零件从连字符开始直到最后一个括号成为可选项。前瞻是零长度的断言,它允许在放置它的位置进行操作。
^(\w+) (?=(?:-.*)?\[([^]]+)\]).*? ((?:\d+\.){3}\d+) \[([^]]+)\]
请在regex101上观看此演示(如果还需要完全匹配,请附加.*
至模式)。
如果您需要更多组,但交替使用相同的组索引,则另一个想法是在分支重置组内捕获,其中捕获组替代方案共享相同的组索引。
^(\w+) (?=(?|-.*\[([^]]+)\]|\[([^]]+)\])).*? ((?:\d+\.){3}\d+) \[([^]]+)\]
regex101上的另一个演示(分支重置在PCRE和JGsoft V2中可用)。
此外,至少在PCRE中存在可用的J
标志(PCRE_DUPNAMES),该标志允许子模式的重复名称。我不知道这些想法中的哪一个最适合您的环境。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句