这是我的自定义标记
[extract=A:B(
<div>
<p>Some content...</p>
</div>
)]
我对正则表达式并不擅长,但这基本上就是我想要的。
\/[extract=(.*?):(.*?)/]\
我需要适当的模式查询和 foreach循环,preg_match_all(),以返回 A &amp; B
答案 0 :(得分:2)
试试这个:
preg_match_all('/\[extract=(?<class>\w+):(?<method>\w+)\((?<html>.*?)\)\]/s', $content, $matches);
print_r($matches['class']);
print_r($matches['method']);
print_r($matches['html']);
应输出:
Array
(
[0] => A
)
Array
(
[0] => B
)
Array
(
[0] =>
<div>
<p>Some content...</p>
</div>
)
答案 1 :(得分:1)
我不完全理解你的问题。 “A”的字符串输入应该在哪里?在字母“A”的位置?
如果这是您想要的,那么解决方案是:
preg_match_all('/\[extract=([^\s]+?):(.+)\]/s', 'your custom tag', $result);
所以您可能正在寻找的是修饰符s
,它修改了点(“。”)字符的含义,以便包含换行符。
如果您想更熟悉正则表达式,我还建议您http://www.regular-expressions.info/。
答案 2 :(得分:1)
这可能并不完美,但似乎可以在非常快速和有限的测试中使用。如果不出意外,它可能会帮助您找到更好的解决方案。
/^(?:\[extract=)(\w)+:(\w+\(.*\))\]$/s
请注意,尾随s
标志用于使点匹配所有字符,包括新行。