帮助正则表达式模式

时间:2011-05-25 20:09:33

标签: php regex preg-match

我需要在wordpress帖子中搜索包含在内容中的图库的帖子,其中的照片是从媒体库插入的,而不是附在帖子上(这是wordpress部分,如果你没有得到它,那就是好的,这只是为了解释我在做什么:)

无论如何,$ subject看起来像这样:

"some text or no text at all [gallery order="DESC" orderby="title" link="file" include="1089,1090,1091,1099,1105,1109,1113"]some text or no text at all"

我需要的是包含的数字列表。请注意,其他参数(如顺序,链接等)不是必需的。

我试过自己,但我不能让它发挥作用,这就是我所做的:

$pattern = '/^.\[gallery.include="(?)".\]$/';
$subject = '[gallery order="DESC" orderby="title" link="file" include="1089,1090,1091,1099,1105,1109,1113"]';
var_dump(preg_match($pattern, $subject, $matches));
print_r($matches);

打印:

int(0) Array ( )

帮助?谢谢!

3 个答案:

答案 0 :(得分:3)

尝试:

$pattern = '/^\[gallery.*?\sinclude="([^"]*)".*\]$/';

正则表达式中的单个.仅匹配一个字符。 .*贪婪地匹配任意数量的字符(即它尽可能地匹配)。 .*?执行相同的操作,但非贪婪(即,只要下一部分或多或少地获得匹配,它就会停止。)

捕获部分是[^"]*,这是一个倒置的字符类,意思是“除了"重复零次或多次之外的任何东西”。

您需要转义[],因为它们是字符类的开始/结束标记。

如果您希望能够在[thing]之前或之后拥有文字,请删除主播(第一个^和最后一个$)。

答案 1 :(得分:1)

好的,有些假设,因为这确实需要一个合适的解析器,而不是正则表达式:

  • 您的]代码中没有gallery个字符。
  • 您的include=代码
  • 中没有出现gallery

在引用的部分中,这两个部分都是正确的。

这个正则表达式应该有效:

$pattern = '/\[gallery[^\]]* include="([\d,]*)"/';

$matches[1]现在将包含以逗号分隔的字符串。

$values = explode(',', $matches[1]);

$values现在将是数字的数组。

答案 2 :(得分:0)

  

尝试:

     

$ pattern =   '/ ^ [?画廊包括= “([^”] )” *。] $ /';

这可能不会起作用,因为他说画廊标签之前和之后可能有文字。

^和$标志分别包含在字符串的开头和结尾处意味着此标记必须是一行中的唯一内容。

使用:

/\[gallery.*?include="([^"]*?)".*?\]/

它应该有用。