2016-05-17 47 views
0

我試圖找到一個可以出現在許多變化的大括號內的字符串。PHP的正則表達式找到字符串的一部分

即 以下字符串我在尋找這個詞鏈接

asdasd {Link1111:TAG} \ r \ n {TAG:Link2sds}

我使用下面的命令:$pattern = "/{(Link.*?)}|{(.*Link.*?)}/";

,其結果是:

{array} [3] 
0 => {array} [2] 
    0 = "{Link1:TAG}" 
    1 = "{TAG:Link2}" 
1 = {array} [2] 
    0 = "Link1:TAG" 
    1 = "" 
2 = {array} [2] 
    0 = "" 
    1 = "TAG:Link2" 

我期待只有沒有花括號的第一個數組...我錯過了什麼正則表達式? thx。

+1

只需使用'$模式= 「?/{(.*鏈接*)} /。?」'和'print_r($ matches [1]);' – Thamilan

+0

yeap!發現...如果你想提交它作爲答案,所以我可以接受:) –

回答

0

只需使用/{(.*?Link.*?)}/和你的比賽將在指數1

<?php 

$str = "asdasd{Link1111:TAG}\r\n {TAG:Link2sds}"; 

$pattern = "/{(.*?Link.*?)}/"; 
preg_match_all($pattern, $str, $matches); 

print_r($matches[1]); 

eval

+1

錯了!在鏈接之前不能使用'。*?'。考慮字符串'{toto123:tag} {Link111:tag}'。 *請記住,正則表達式引擎從左到右走,並嘗試在每個位置成功。* –

1

preg_match_all是全球性的,可以找到所有匹配項。如果您只想使用preg_match就可以找到它。

演示:https://eval.in/572825

在當前的示例中的0指數是所有比賽。 1是第一個捕獲組Link.*?,而2是您的第二個捕獲組.*Link.*?

相關問題