PHP REGEX:space&参数中的换行符(自定义标签)

时间:2011-01-07 15:16:30

标签: php regex

这是我的自定义标记

[extract=A:B(

   <div>
       <p>Some content...</p>
   </div>

)]
  • 单词 extract 保持不变。
  • 值A有一个字符串输入(一个字没有空格,没有换行符)
  • 值B将包含在()中关闭的html。它将包含换行符



我对正则表达式并不擅长,但这基本上就是我想要的。

\/[extract=(.*?):(.*?)/]\


我需要适当的模式查询和 foreach循环,preg_match_all(),以返回 A &amp; B

3 个答案:

答案 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标志用于使点匹配所有字符,包括新行。