我有這樣的程序:$txt = "{ABC}+ 1- 1{DEF}+ 2- 2{IJK}+ 3- 3{LMN}+ 4 - 4";preg_match_all('/\{.*?\{/s', $txt, $matches);var_dump($matches);我想匹配兩個左大括號(或文本結尾)之間的所有內容。但我的結果只包含 ABC 和 IJK 塊,因為下一個 { 已經被吃掉了。array(1) { [0]=> array(2) { [0]=> string(16) "{ABC}+ 1- 1{" [1]=> string(16) "{IJK}+ 3- 3{" }}
2 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
使用正則表達式先行運算?(?=)
符將允許您匹配 a 之前的任何內容,{
而無需實際匹配{
字符本身。
preg_match_all('/\{.*?(?=\{)/s',?$txt,?$matches)
會給你這個結果:
array(1) {
? [0]=>
? array(3) {
? ? [0]=>
? ? string(15) "{ABC}
+ 1
- 1
"
? ? [1]=>
? ? string(15) "{DEF}
+ 2
- 2
"
? ? [2]=>
? ? string(15) "{IJK}
+ 3
- 3
"
? }
}
您提到您還想匹配 a{
和文本末尾之間的內容。您可以通過在前瞻內使用管道運算符和字符串?錨點|
末尾來實現此目的。?$
preg_match_all('/\{.*?(?=\{|$)/s',?$txt,?$matches)
會給你你想要的結果:
array(1) {
? [0]=>
? array(4) {
? ? [0]=>
? ? string(15) "{ABC}
+ 1
- 1
"
? ? [1]=>
? ? string(15) "{DEF}
+ 2
- 2
"
? ? [2]=>
? ? string(15) "{IJK}
+ 3
- 3
"
? ? [3]=>
? ? string(14) "{LMN}
+ 4?
- 4"
? }
}
- 2 回答
- 0 關注
- 182 瀏覽
添加回答
舉報
0/150
提交
取消