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

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