0

每当我需要使用正则表达式时,我似乎都无法正确使用它们......

给定一个像这样的字符串:

$string = 'text here [download="PDC" type="A"] and the text continues [download="PDS" type="B"] and more text yet again, more shotcodes might exist ...';

我需要打印“此处的文本”部分,然后根据变量“PDC”和“A”执行 mysql 查询,然后打印字符串的其余部分......(如果更多 [下载] 存在于细绳)。

到目前为止,我有以下正则表达式

$regex = '/(.*?)[download="(.*?)" type="(.*?)"](.*?)/';
preg_match($regex,$string,$res);
print_r($res);

但这仅捕获以下内容:

Array ( [0] => 111111 [1] => 111111 [2] => ) 

我正在使用 preg_match() ...我应该使用 preg_match_all() 代替吗?无论如何......正则表达式肯定是错误的......有什么帮助吗?

4

2 回答 2

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
                                                      ##    ##
于 2013-01-06T00:03:07.910 回答
1

用“小”一试

/(?P<before>(?:(?!\[download="[^"]*" type="[^"]*"\]).)*)\[download="(?P<download>[^"]*)" type="(?P<type>[^"]*)"\](?P<after>(?:(?!\[download="[^"]*" type="[^"]*"\]).)*)/

它将在匹配结果中为您提供键before、、after和。downloadtype

在这里测试:http ://www.regex101.com/r/mF2vN5

于 2013-01-06T00:12:57.830 回答