在preg_match中使用@时的意思是什么?

时间:2011-04-05 06:28:58

标签: php

这是来自一个类,在preg_match中有一个@符号是什么意思或它的用途?这是否意味着空间?

if (preg_match("@Property Information </td>@",simplexml_import_dom($cols->item(0))->asXML(),$ok))
{
     $table_name = 'Property Information';
}

4 个答案:

答案 0 :(得分:1)

这只是一个分隔符。它可以是任何其他一对角色。以下都是相同的

"@Property Information </td>@"
"+Property Information </td>+"
"|Property Information </td>|"
"#Property Information </td>#"
"[Property Information </td>]"
...

分隔符用于将正则表达式模式与修饰符分开的目的,例如如果你需要不区分大小写的匹配,你会在分隔符之后添加i,例如

"@Property Information </td>@i"
"+Property Information </td>+i"
"|Property Information </td>|i"
"#Property Information </td>#i"
"[Property Information </td>]i"
...

有关详细信息,请参阅http://www.php.net/manual/en/regexp.reference.delimiters.php

答案 1 :(得分:1)

在这种情况下,它被用作pattern delimiter。正如该手册页所说,

  

使用PCRE功能时,要求图案由分隔符包围。分隔符可以是任何非字母数字,非反斜杠,非空白字符。

     

经常使用的分隔符是正斜杠(/),井号(#)和波浪号(〜)。

答案 2 :(得分:1)

几乎任何字符 - 出现在第一个位置时 - 都可以用作PCRE分隔符。在这种情况下,它是@(另一个常见的是/,但在处理结束标记时,一个不是很好,因为你必须在文本中每个/转义一次 )

有关详细信息,请参阅http://www.php.net/manual/en/regexp.reference.delimiters.php


但是,您根本不应该使用Regex进行此检查 - 您只是测试普通字符串是否在另一个字符串中。这是一个合适的解决方案:

$xml = simplexml_import_dom($cols->item(0))->asXML()
if(strpos($xml, 'Property Information </td>') !== false) { ... }

实际上,在处理html / xml时使用字符串运算符并不是很好,但如果你只是做简单的“包含”检查,那通常是最简单的方法。

答案 3 :(得分:1)

每个正则表达式必须以相同的字符开头和结尾。给定正则表达式的作者选择以@符号开始和结束正则表达式。

相关问题