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