2017-02-20 53 views
0

我必須在某個字符串在我的代碼是這樣的:我的正則表達式是不正確捕獲組

href="http://mywebsite.com/site/link.php?M=191123&N=34&FL=H&L=7" 

我需要搶是/site/後的一切,所以我用以下代碼嘗試這樣的:

preg_match("/site\/(.*?)(?:\"|')/i", $href, $pmatch); 
$params = json_encode($pmatch); 

但是,當我回聲$params,我得到的[]的價值,所以它不匹配任何團體,它應該有哪些?

編輯

的事情是,我用這個代碼在一個單獨的PHP文件:

$href = 'href="http://mysite/em/site/link.php?M=191123&N=34&FL=H&L=7"'; 
preg_match("/site\/([^\"']*)/i", $href, $matches); 
$params = $matches[1]; 

echo $params; 

並能正常工作?

+0

剛做零或更多匹配時出現了什麼問題? \/site \ /(。*) –

+0

您有'$ href =「http://mywebsite.com/site/link.php?M=191123&N=34&FL=H &L=7";'或'$ href ='一些文字href = http://mywebsite.com/site/link.php?M = 191123&N = 34&FL = H &L=7"';'? – chris85

+0

我的腳本正在做的是通過所有鏈接並替換它們中的值,所以在每次迭代中,這個字符串是'href =「somelink」' – ThePerplexedOne

回答

0

如果你想捕捉一切都交給報價(我假設在href =和引號是你要搜索的文本的一部分),那麼就使用這樣的:

/site\/([^\"']*)/i 

順便說你正則表達式在Regex 101上工作,所以也許別的東西是錯的?

你是肯定最後一個報價是你想要搜索的字符串的一部分嗎?只需將其更改爲這個,看看它的工作原理:

/site\/(.*)/i 

其實是不應該的問題,因爲以前的正則表達式不測試的最後報價。

你的一個回答不正確。嘗試在撥打電話之前打印$ href的值。

+0

這就是讓我困惑的東西,它在那裏工作,但不在我的PHP。也許這與我正在搜索的字符串有關。但是,當我回應時,這就是我得到的字符串... – ThePerplexedOne