我正在尝试使用以下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中的未知修饰符'(''
有人可以帮忙吗?
答案 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)
/^<[^>]+>(.*)<\/[^>]+>$/
应该可以解决问题。