[英]How do I avoid capturing the primary group of a given regex pattern?
我有一个正则表达式模式:
<^(([a-z]+)\:([0-9]+)\/?.*)$>
如何避免占领主要人群?
<^(?:([a-z]+)\:([0-9]+)\/?.*)$>
上面的模式仍然会将整个字符串'localhost:8080'放入第一个(0)组。 但是我只需要获得2个匹配的组,以便第一个(0)组填充为'localhost',第二个(1)填充为'8080'。
我在哪里弄错了?
第一组0将始终是整个匹配项。
这就是正则表达式功能的工作方式。 第一组始终是整个比赛。 您可以使用array_shift
摆脱它。
在正则表达式中,$ 0始终等于匹配字符串,而不是分组之一。 比赛组的总起价为$ 1。 因此,请看$ 1和$ 2而不是$ 0和$ 1。
如果您正在处理URL,则可以尝试使用PEAR NetURL,或者在这种情况下可能更适合您的方法是parse-url()
print_r(parse_url($ url));
从文档 :
火柴
如果提供了匹配项,则将其填充为搜索结果。 $ matches [0]将包含与完整模式匹配的文本,$ matches [1]将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
如果您不关心完全匹配,则可以使用array_shift()
删除不需要的元素。
array_shift($matches);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.