Validade如果字符串包含一个正则表达式串

问题描述:

我有以下的字符串下面将其通过DOM Document萃取:Validade如果字符串包含一个正则表达式串

$scripts = $doc->getElementsByTagName('script'); 
$script = $scripts->item($i); 
$string = $script->getAttribute('src');// Save the string 'jquery-3.2.0.min.js' 

我有3种方式,以检查是否该字符串是一个jquery:

jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1 
/([\\d.]+)/jquery(?:\\.min)?\\.js\\;version:\\1 
jquery.*\\.js 

在这种情况下,我如何使用这3个命令中的一个来验证上面的字符串?

+1

做一个简单的检查了 “jQuery的” 用'strpos'和检查节点是否为空。 *(也可以使用XPath完成)*。你不需要一个正则表达式。 –

+3

标题和你的问题是不同的。 – Rahul

+0

我想你正在寻找'preg_match()':http://php.net/preg_match – rickdenhaan

使用preg_match

的preg_match - 如果找到匹配它会打印出Match found执行正则表达式匹配

if (preg_match("/jquery.*\.js/",$string)) { 
    echo "Match found"; 
} 

。 (我刚刚使用你的一个正则表达式字符串)

我还假设你提取的是$string,因为很难说。

Try it out

+0

警告:preg_match():分隔符不能是字母数字或反斜杠 – TheDuck

+0

我认为这是您的正则表达式字符串@ TheDuck –

+0

在正则表达式字符串的开头和结尾处添加'/'。 – Mikey

可以说是只链接到jQuery的lib中使用XPath很容易地选择脚本标签:

$xp = new DOMXPath($doc); 
$nodeList = $xp->query('//script[.=""]/@src[contains(., "jquery")]'); 
foreach ($nodeList as $node) { 
    echo $node->nodeValue, PHP_EOL; 
} 

demo

+2

好的解决方案,使用'DOMXPath' –