的外面,我有文字,如:正則表達式:得到的是我使用PHP支架
first [abc] middle [xyz] last
我需要得到什麼內部和外部的括號。搜索在StackOverflow的我發現一個規律,以獲取裏面有什麼:
preg_match_all('/\[.*?\]/', $m, $s)
現在我想知道的格局得到只是表面現象。
商祺!
的外面,我有文字,如:正則表達式:得到的是我使用PHP支架
first [abc] middle [xyz] last
我需要得到什麼內部和外部的括號。搜索在StackOverflow的我發現一個規律,以獲取裏面有什麼:
preg_match_all('/\[.*?\]/', $m, $s)
現在我想知道的格局得到只是表面現象。
商祺!
您可以使用preg_split
此爲:
$input ='first [abc] middle [xyz] last';
$arr = preg_split('/\[.*?\]/',$input);
print_r($arr);
輸出:
Array
(
[0] => first
[1] => middle
[2] => last
)
這允許輸出中的一些周圍空間。如果你不希望他們可以使用:
$arr = preg_split('/\s*\[.*?\]\s*/',$input);
preg_split
分割基於模式的字符串。這裏的模式是[
,其次是]
。匹配任何東西的正則表達式是.*
。另外[
和]
是用於char類的正則表達式元字符。因爲我們想要從字面上匹配它們,所以我們需要轉義它們以得到\[.*\]
。 .*
默認爲貪婪,並儘可能匹配。在這種情況下,它將匹配abc] middle [xyz
。爲了避免這種情況,我們通過給它添加一個?
以使\[.*?\]
不貪心。由於我們的東西在這裏DEF實際上意味着比]
其他任何我們也可以使用\[[^]]*?\]
編輯:
如果你想提取的內部和[]
外面的話,你可以使用:
$arr = preg_split('/\[|\]/',$input);
其中分裂在[
或]
使用preg_split代替preg_match。
preg_split('/\[.*?\]/', 'first [abc] middle [xyz] last');
結果:
array(3) {
[0]=>
string(6) "first "
[1]=>
string(8) " middle "
[2]=>
string(5) " last"
}
$inside = '\[.+?\]';
$outside = '[^\[\]]+';
$or = '|';
preg_match_all(
"~ $inside $or $outside~x",
"first [abc] middle [xyz] last",
$m);
print_r($m);
字符串
以下詳細
preg_match_all("~\[.+?\]|[^\[\]]+~", $str, $matches)
由於每個人說,你應該使用使preg_split,但只有一個人回答道,以滿足您的需求,
一種表達,我認爲這是一個有點複雜
- 並不複雜,有點冗長,但他已經更新了他的答案以應對這種情況。
這個表達式是大多數回覆所說的。
/\[.*?\]/
但這隻能打印出
Array
(
[0] => first
[1] => middle
[2] => last
)
,你說你想要什麼內部和括號外,SIO的更新將是:
/[\[.*?\]]/
這給了你:
Array
(
[0] => first
[1] => abc
[2] => middle
[3] => xyz
[4] => last
)
但只要你可以看到它捕捉空格爲好,這樣可以讓更進一步,擺脫那些:
/[\s]*[\[.*?\]][\s]*/
這會給你一個想要的結果:
Array
(
[0] => first
[1] => abc
[2] => middle
[3] => xyz
[4] => last
)
這個我覺得是表達你的尋找。
這仍然不符合OP要求? – RobertPitt 2010-09-15 20:09:40
@RobertPitt:感謝您的指點。我已經更新了我的答案。 – codaddict 2010-09-15 20:20:09
沒問題,很好的清理空間並保存使用trim,'/ \ s * \\ [| \\] \ s * /' – RobertPitt 2010-09-15 20:45:42