每当我需要使用它时,我似乎无法正确使用正则表达式...
给出像这样的字符串:
$string = 'text here [download="PDC" type="A"] and the text continues [download="PDS" type="B"] and more text yet again, more shotcodes might exist ...';
我需要打印“text here”部分,然后根据变量“PDC”和“A”执行mysql查询,然后打印字符串的其余部分...(如果更多的话,再次重复[download]存在于字符串中。
到目前为止,我有以下正则表达式
$regex = '/(.*?)[download="(.*?)" type="(.*?)"](.*?)/';
preg_match($regex,$string,$res);
print_r($res);
但这只是捕获以下内容:
Array ( [0] => 111111 [1] => 111111 [2] => )
我正在使用preg_match()...我应该使用preg_match_all()吗?无论如何......正则表达式肯定是错的......任何帮助?
答案 0 :(得分:2)
[
打开字符类,]
完成它。具有含义的此类字符需要转义或放入PCRE正则表达式的QE块中。
/(.*?)\Q[download="\E(.*?)" type="(.*?)"](.*?)/
##^ ## ^-- you were looking for "tipo"
|
this character needs to be taken literal, hence the \Q....\E around it
## ##
答案 1 :(得分:1)
尝试使用“小”一个
/(?P<before>(?:(?!\[download="[^"]*" type="[^"]*"\]).)*)\[download="(?P<download>[^"]*)" type="(?P<type>[^"]*)"\](?P<after>(?:(?!\[download="[^"]*" type="[^"]*"\]).)*)/
它会在匹配结果中为您提供密钥before
,after
,download
和type
。