跨越一行的PHP Regex模式

时间:2011-08-21 09:38:24

标签: php regex

我有:

action=wuffwuff
form
action=meowmeow
action=mooomooo

如何在“表单”之后提取操作的值?

使用preg_match,我尝试了模式

/form.*?action=(.*)/m

哪种方式不起作用

谢谢

2 个答案:

答案 0 :(得分:2)

您不必使用多行修饰符//m,而是使用//s,以便您的第一个点匹配包括换行符在内的所有内容(您可以阅读修饰符here的含义)。

此外,您应该将您的论坛限制为非换行的所有内容:

/form.*?action=([^\n]*)/s

答案 1 :(得分:0)

如果您希望在form之后执行单个操作:

preg_match( '/form.*?action=(.*?)\r?(?:\n|$)/s', $str, $matches );
var_dump( $matches[1] );

结果:

string(8) "meowmeow"

如果您希望在form之后使用preg_match_all()获取所有操作,则无法执行此操作,因为这需要像(?<=form.*)那样的可变长度后视在PHP中是不允许的。但是如果删除“after form”要求(拆分字符串并只保留表单之后的部分),您可以使用此正则表达式来获取所有操作:

preg_match_all( '/action=(.*?)\r?(?:\n|$)/s', $str, $matches );
var_dump( $matches[1] );

结果:

array(3) {
  [0]=>
  string(8) "wuffwuff"
  [1]=>
  string(8) "meowmeow"
  [2]=>
  string(8) "mooomooo"
}