对于经验丰富的正则表现主义者来说,这可能是一个快速的问题,但我无法正确执行匹配。
假设我有一个看起来像这样的字符串:
http://aaa-bbbb-cc-ddddd-eee-.sub.dom
我想要捕获所有“aaa”,“bbbb”,“cc”和“ddddd”子串,但我不确定会有多少(例如,让所有三胞胎都通过“ ZZZ“)。
这是我正在尝试使用的正则表达式:
/http:\/\/(\w*?\-)+\.sub\.dom/
我这样写是因为:
但似乎只是保存了它所做的 last 匹配(在上面的例子中,它只匹配“eee - ”。
有没有一种很好的方法可以捕获所有匹配的子串?
更多信息:我正在使用PHP的PCRE函数preg_replace_callback
。谢谢!
答案 0 :(得分:4)
不,不可能匹配未知数量的捕获组。
如果您尝试重复捕获组,它将始终包含捕获的最后一个值。
你能更广泛地解释一下你想做什么吗?也许还有另一种简单的方法(可能没有正则表达式)。
答案 1 :(得分:2)
如果你想要子域中的项目,然后是破折号之间的所有匹配......这应该有效:
$string = "http://aaa-bbbb-cc-ddddd-eee-.sub.dom";
preg_match("/^http:\/\/([\w-]+?)\..*$/i", $string, $match);
$parts = explode('-', $match[1]);
print_r($parts);
如果没有这样做,你可能需要构建一个小的解析脚本来自己解析字符串。