我需要在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 ( )
尝试:
$pattern = '/^\[gallery.*?\sinclude="([^"]*)".*\]$/';
正则表达式中的单个 .
仅匹配one 字符。
.*
贪婪地匹配任意数量的字符(即它尽可能地匹配)。
.*?
做同样的事情,但不是贪婪的(即,一旦下一部分或多或少匹配,它就会停止)。捕获部分是
[^"]*
,它是一个反向字符类,意思是“除了
"
重复零次或多次之外的任何内容”。并且您需要转义
[
和
]
因为它们是字符类的开始/结束标记。如果您希望能够在
[thing]
之前或之后添加文本,请删除锚点(第一个
^
,最后一个
$
)。
]
标签中没有
gallery
字符。
include=
标签中没有出现
gallery
这个正则表达式应该可以工作:
$pattern = '/\[gallery[^\]]* include="([\d,]*)"/';
$matches[1]
现在将包含一个以逗号分隔的字符串。
$values = explode(',', $matches[1]);
$values
现在将是一个数字数组。
尝试:这可能行不通,因为他说画廊标签之前和之后可能有文字。$模式= '/^[图库。
?include="([^"])".*]$/';
分别包含在字符串开头和结尾的 ^ 和 $ 标志意味着该标签必须是一行中唯一的内容。
用途:
/\[gallery.*?include="([^"]*?)".*?\]/
它应该可以工作。