带有正则表达式的PHP脚本

时间:2010-10-14 03:28:32

标签: php regex preg-match

我正在尝试使用以下php脚本获取标题标记之间的文本:

$search_string= < h1 >testing here< /h1 >;

$text = preg_match('<%TAG%[^>]*>(.*?)</%TAG%>',$search_string, $matches);

echo $matches[0]; 

当我尝试运行此脚本时,没有返回任何值。而是有警告信息: 警告:preg_match()[function.preg-match]:第10行的C:\ xampp \ htdocs \ check_for_files.php中的未知修饰符'(''

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

您的表达需要delimiters/是最常见的,但#应该适用于这种情况。

$text = preg_match('#<%TAG%[^>]*>(.*?)</%TAG%>#',$search_string, $matches);

答案 1 :(得分:2)

警告是因为您没有将正则表达式括在分隔符中。所以试试

$text = preg_match('#<%TAG%[^>]*>(.*?)</%TAG%>#',$search_string, $matches);

了解警告。

考虑你的正则表达式:

'<%TAG%[^>]*>(.*?)</%TAG%>'
 ^          ^
start      end 

由于您没有明确地将正则表达式置于分隔符之间,因此PHP认为您使用<>作为分隔符,因为<是正则表达式中的第一个字符。因此,当它看到未转义的<时,它将其作为模式的结尾。接下来,我们可以在结束分隔符之后使用很少的修饰符,这允许我们改变模式匹配的行为。一些commmon修饰符是:

  • i不区分大小写
  • m用于多行匹配

现在在你的情况下,在结束分隔符之后有一个(,它不是一个有效的修饰符,因此就是警告。

答案 2 :(得分:1)

/^<[^>]+>(.*)<\/[^>]+>$/应该可以解决问题。