2011-05-09 75 views
2

我有这样的HTML标签:警告:的preg_match()[function.preg匹配]:未知的修饰词 '('

<div class="title">Copy me if you can</div> 

所以我想使用的preg_match采取 只是 “如果你可以复制我”我使用这个模式浸渍:

$preg = "<div class=\"title\">(.+?)</div>"; 

所以我写了这个代码

$match = preg_match($preg,$content); 

浏览器输出:

Warning: preg_match() [function.preg-match]: Unknown modifier '(' 

什么

+0

http://stackoverflow.com/questions/1531456/is-there-a-php-function-that-c​​an-escape-正则表达式模式在他们被应用之前 – zloctb 2015-10-27 11:19:52

回答

1

您需要delimites添加到您的正则表达式。试试这个:

$preg = "/<div class=\"title\">(.+?)<\/div>/"; 

/是这标志着你的正则表达式的开始和结束的分隔符。分隔符的原因是,您可以将标志添加到您的正则表达式中。这些标志插在你的正则表达式之后。例如:

$preg = "/<div class=\"title\">(.+?)<\/div>/i"; 

我添加i作为改性剂,标志着正则表达式搜索不区分大小写。

+1

你不需要在你的关闭div中转义/?另外,当你匹配点时区分大小写不是问题 – 2011-05-09 19:35:03

+0

@Nev它只是解释分隔符的一个例子。 – alexn 2011-05-09 19:46:04

+1

理解,但它不会有人真的尝试它。如果不使用<\/div>,你只会混淆那些不熟悉的人。 – 2011-05-09 19:48:29

4

你忘了分隔符

$preg = '~<div class="title">(.+?)</div>~'; 

在模式的第一个字母总是定义使用的分隔符。在你的情况下,它的<,所以结尾分隔符是>。之后的所有内容都被用作特殊的修饰语,改变特定的行为。 (不是有效的修饰符。那是错误消息想告诉你:)什么

+0

它的作品!谢谢(:,但是有没有任何RegExp只需要标签之间的内容?(如果可以,请复制我的内容),我的RegExp采用整个标记:/我知道我可以使用str_replace()来替换标记,但只用一个RegExp来完成这项工作更好xD – Adam 2011-05-10 09:50:59

1

尝试:$preg = '/<div class="title">([^<]+)</div>/';

1

个人而言,当HTML参与我会避开从事实上的分隔符/拿走并使用#代替你不必记住以逃避任何关闭的HTML标签。

$preg = '#<div class="title">([^<]+)</div>#'; 
1

我有同样的问题,并想知道如果我能做到这一点,例: 警告:的preg_match()[function.preg匹配]:在未知的修饰词 'T' 的/ home/08 /公/www/wp-content/plugins/woocommerce-gateway-dibs-form/gateway-dibs.php线707

这是代码: 如果(的preg_match($ _ SERVER [ “REQUEST_URI”],“woocommerce/'')==假){

 header("HTTP/1.1 200 Ok"); 

     $callback = new WC_Gateway_Dibs; 
     $callback->cancel_order(stripslashes_deep($_REQUEST)); 
     return; 
    } 
相关问题