簡體   English   中英

如何避免捕獲給定正則表達式模式的主要組?

[英]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擺脫它。

http://www.php.net/manual/zh/function.array-shift.php

在正則表達式中,$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM