解析并替换包含附加属性的 WordPress 短代码

问题描述 投票:0回答:3

我需要在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 ( )
php regex wordpress text-parsing wordpress-shortcode
3个回答
3
投票

尝试:

$pattern = '/^\[gallery.*?\sinclude="([^"]*)".*\]$/';
正则表达式中的单个

.

 仅匹配 
one 字符。 .*
 贪婪地匹配任意数量的字符(即它尽可能地匹配)。 
.*?
 做同样的事情,但不是贪婪的(即,一旦下一部分或多或少匹配,它就会停止)。

捕获部分是

[^"]*

,它是一个反向字符类,意思是“除了 
"
 重复零次或多次之外的任何内容”。

并且您需要转义

[

]
 因为它们是字符类的开始/结束标记。

如果您希望能够在

[thing]

 之前或之后添加文本,请删除锚点(第一个 
^
,最后一个 
$
)。


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

    您的
  • ]
     标签中没有 
    gallery
     字符。
  • 您的
  • include=
     标签中没有出现 
    gallery
    
    
这两者在引用的部分内部和外部都是正确的。

这个正则表达式应该可以工作:

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

$matches[1]

 现在将包含一个以逗号分隔的字符串。

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

$values

 现在将是一个数字数组。


0
投票
尝试:

$模式= '/^[图库。

?include="([^"])".*]$/';

这可能行不通,因为他说画廊标签之前和之后可能有文字。

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

用途:

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

它应该可以工作。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.