2011-04-05 202 views
0

这是从一个类中preg_match中有一个@符号它是什么意思或它的目的?这是否意味着一个空间?@在preg_match中使用时的含义是什么?

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

回答

1

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

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

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

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

几乎任何字符 - 出现在第一个位置时 - 都可以用作PCRE分隔符。在这种情况下它是@(另一种常见的一个是/但结束标记,一个是没有你不得不逃离每/文本 真的很好打交道时)

详见http://www.php.net/manual/en/regexp.reference.delimiters.php


但是,你不应该使用正则表达式在本次检查的话 - 你只是测试,如果一个普通字符串在另一个字符串。这里有一个妥善的解决办法:

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

其实用字符串运算符与HTML打交道时/ XML是不是真的很好,但如果你只是在做简单的“包含”检查它通常是最简单的方法。

+0

谢谢,因为这些@被用作替代/如何查找文本和第一个param默认为正则表达式 – 2011-04-05 06:33:30

+0

由于它是一个没有任何特殊字符的普通字符串根本没有使用正则表达式功能 - 正因为如此,请参阅我的答案的第二部分。 – ThiefMaster 2011-04-05 06:34:44

1

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