如何解决如何捕获所有事件
| 我有<key,value>
对的列表,其格式设置为以下字符串:
Akey = valueBAkey = valueB ...
因此,例如字符串“ 1”给出以下三对:
k1 = v1
k2 = v2
k3 = v3
我正在尝试使用PHP中的正则表达式减去所有的<key,value>
对。
到目前为止,我得到的正则表达式如下:
.*A(.+)=(.+)B.*
但这只抓住了最后一对,pair5ѭ。
如何捕获所有事件?
解决方法
您确定没有得到这个吗?
name: k1=v1BAk2=v2BAk3
key: v3
如果您是,则您的第一个.+
与ѭ8matching匹配,之后的所有内容将与最后一个=
匹配。
我建议使用非贪婪修饰符?
:
/.*A(.+?)=(.+?)B.*/
还要确保您使用的是preg_match_all
,而不是preg_match
。这相当于PHP \赋予正则表达式引擎/g
标志,以允许多个匹配项。
,使用这样的其他正则表达式:
if (preg_match_all(\'/A([^=]+)=([^B]+)B/\',\'Ak1=v1BAk2=v2BAk3=v3B\',$m) > 0) {
var_dump($m[1]); // prints keys
var_dump($m[2]); // prints values
}
输出值
array(3) {
[0]=>
string(2) \"k1\"
[1]=>
string(2) \"k2\"
[2]=>
string(2) \"k3\"
}
array(3) {
[0]=>
string(2) \"v1\"
[1]=>
string(2) \"v2\"
[2]=>
string(2) \"v3\"
}
,您需要使用非贪婪模式:A(.+?)=(.+?)B
.+?
和.*?
用于捕获所有字符,直到找到下一个字符。
,另一个更新
这个正则表达式:/A(k\\d+=(v\\d+))B/
将为您提供k=v
匹配项的数组和仅包含值的数组。
在此正则表达式测试仪上尝试一下。看起来它正在为您提供想要的结果。这假定\“ k \”,\“ v \”,\“ A \”和\“ B \”是静态的,但是您应该能够更改它以接受动态值。
(实际上,这是任何值的内容:/A(.*?=(.*?))B/
)
更新
实际上,我只是注意到您正在使用PHP。
只需使用preg_match_all即可获取字符串中所有出现的数组。
原版的
可能是使用全局运算符//g
这匹配所有出现,而不仅仅是最后一个(或第一个)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。