如何生成在开头或结尾不包含特定字符串的正则表达式?

时间:2011-01-04 07:32:26

标签: regex

我很难创建一个匹配任何字符串的正则表达式:
1-包含“< p> \ S< / p>”在文本中间 2-不包含< p> \ S< / p>在文本的开头或结尾

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

从评论中看,您希望匹配<p></p>之间的单个空格。如果是这样,那么您应该使用\s而不是\S\s匹配任何单个空白字符,其中\S匹配任何一个非空白字符。

您可以尝试:

(?!^<p>\s<\/p>)(?!.*<p>\s<\/p>$)(?=.*<p>\s<\/p>)

部分(?!^<p>\s<\/p>)确保字符串不以<p>\s<\/p>开头。

部分(?!.*<p>\s<\/p>$)确保字符串不以<p>\s<\/p>结尾。

部分(?=.*<p>\s<\/p>)确保字符串在某处<p>\s<\/p>

如果你在PHP中使用它,你应该将正则表达式放在一对分隔符之间:

$x="abc <p> </p> def";
$R="#(?!^<p>\s<\/p>)(?!.*<p>\s<\/p>$)(?=.*<p>\s<\/p>)#";                        
$result=preg_match($R,$x); 
var_dump($result); // prints 1.