允许空间进入我的正则表达式

时间:2014-01-09 21:06:11

标签: php regex

我找不到一种方法来允许此正则表达式中的空格用于标题标记之间的提取

 <title>my exemple</title>

这是正则表达式

 $pattern = "/<title>(.+)<\/title>/i";

我试过

 /<title>(.+)<\/title>/i\s
 /<title>(.+)<\/title>/i\S
 /<title>\s(.+)<\/title>/i
 /<title>(.+)\s<\/title>/i     

这是完整的功能

function getSiteTitle(){
$RefURL = (is_null($_SERVER['HTTP_REFERER'])) ? 'Un know' : $_SERVER['HTTP_REFERER'];
if($RefURL != 'Un know'){
$con = file_get_contents($RefURL) or die (" can't open URL referer ");
$pattern = "/<title>(.+)<\/title>/i";
preg_match($pattern,$con,$match);
$result = array($match[1],$RefURL);
return $result;

我已经确认我在我的推荐人中收到了一个关键字,因为它对于没有空格的关键字效果不错

你好

3 个答案:

答案 0 :(得分:0)

如果你想在多行上捕获HTML(你的意思是“空格”?),你需要打开s modifier,这样.字符才能匹配换行符也是如此。

这应该有效:

/<title>(.+)<\/title>/is

答案 1 :(得分:0)

怎么样

$pattern = "/<title>\s*(.+)\s*<\/title>/i";

然后第一个捕获组将只包含关键字,可能包含空格,如:

<title>      key  word    </title>
// result is "key  word"

如果您想在标题中也允许换行,请将s修饰符添加到结尾(/.../is)。

如果我得到你想要的,你也可以使用这种方法:

$pattern = "/<title>(.+)<\/title>/is";

然后trim第一个捕获组。

答案 2 :(得分:0)

在标题文字和标签之间选择文字:

/<title>(.+)<\/title>/

即使它们分布在多行上也是如此:

/<title>(.+)<\/title>/s

执行与上述相同但忽略案例(大写或小写无关紧要)

/<title>(.+)<\/title>/is

现在我们使用lookbehind和lookahead来仅选择标签之间的文本:

/(?<=<title>)(.+)(?=<\/title>)/is

请按照您需要的方式更改标志(i和s)。

如果这不能解决你的问题,我不知道会发生什么:)

在这里,您可以看到我的上一个正则表达式如何工作的示例:http://regexr.com?37ukf

编辑:

好的,尝试在某处测试此代码:

<?php 
$title = '<title> My Example </title>';
preg_match('/(?<=<title>)(.+)(?=<\/title>)/is', $title, $match);
var_dump($match);
?>

你会发现它完美无缺。现在有了这些知识,请检查$con是否真的像你认为的那样。并执行var_dump $matches而不是查找特定索引。