preg_match用于url中的特定模式?

时间:2014-04-01 04:11:06

标签: php html-parsing preg-match

我想在PHP中使用preg_match来测试URL的格式。 URL如下所示:

<a href='http://~dead host~/vypdye57f25o' rel='nofollow' target='blank'>part-2</a>
老实说,我不知道preg_match创造,但我的目标是

模式以<a href= contain word ~dead host~ end with </a>

开头

我尝试在php原生函数中包含字符串,但不幸的是它不聪明,所以我认为preg_match是唯一的选择。

2 个答案:

答案 0 :(得分:0)

我并不完全清楚你的文字是什么样的,与你想要匹配的内容相比,但是我会尽力去做正确的事。

基本上我在这里做的是寻找一个开放链接标记<a,然后是一些东西(除了关闭HTML标记之外的任何东西),然后是包含在tildas {{1}中的文本dead host }}。然后是更多内容,然后是结束链接标记~

</a>

以下是对REGEX的解释:

$string = "<a href='http://~dead host~/vypdye57f25o' rel='nofollow' target='blank'>part-2</a>";

if (preg_match('%<a[^>]*?~dead host~.*?</a>%i', $string)) {
    print "Circle up the wagons - a match was found!";  
}
else {
    print "Let's pitch camp here - no match was found!";
}
  1. % <a [^>]*? ~dead host~ .*? </a> % i ^ ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 8 分隔符 - 告诉脚本该模式从此处开始。
  2. %寻找开放链接标记。
  3. <a这是一个字符类[^>]*?,告诉脚本找到任何不是[]关闭html标记^的字符,尽可能多次{ {1}},直到你点击表达式>的下一部分。在这种情况下,它会在找到*时停止。这与第5项类似,不同之处在于我们希望它匹配除结束HTML标记之外的任何字符,而在数字#5中,它可以匹配任何字符,包括结束HTML标记。
  4. ?寻找包含在tildas'〜'中的文字字符串'dead host'。
  5. ~dead host~这意味着,在您点击表达式~dead host~的下一部分之前,尽可能多地找到任何字符.*? . *。在这种情况下,它是?
  6. </a>寻找结束链接标记。
  7. </a>分隔符 - 告诉脚本该模式在此处结束。
  8. %模式修饰符 - 告诉脚本忽略大小写。如果您要搜索多行而不是一行,则可能还需要添加i标记。因此,代替您的模式修饰符,如下所示:ms,它将如下所示:i。虽然这在技术上并不正确,但一般来说,这会将文本视为一行,即使您有多行。
  9. 希望这就是你要找的东西。如果我对你所寻找的内容有所了解,请告诉我,我可以进行编辑以调整它以获得你想要的东西。

    Here is a working demo

    修改

    在回复您的评论时,您可以使用ims代替preg_replace来替换内容。

    preg_match

    这将用空格替换所有匹配,而不是仅匹配它们。

    Here is a working demo of the replacement

答案 1 :(得分:0)

如果您只想匹配网址

$text="<a href='http://~dead host~/vypdye57f25o' rel='nofollow' target='blank'>part-2</a>";

 preg_match_all("/http:\/\/ ## starting from http://
 ~dead\shost~   ## along with http:// match ~dead host~
 [^\"']         ## upto singlequote or doublequote  
 +              ## one more character  
 /mx",$text,$matches);   //  m - multiple line x - include to commentary inside patterns
 print_r($matches);

工作Demo