что означает @ при использовании в preg_match?

#php

#php

Вопрос:

Это из класса, в preg_match есть знак @, что это значит или его назначение? Означает ли это пробел?

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

Ответ №1:

В этом случае он используется как разделитель шаблона. Как сказано на странице руководства,

При использовании функций PCRE требуется, чтобы шаблон был заключен в разделители. Разделителем может быть любой не буквенно-цифровой символ без обратной косой черты и пробелов.

Часто используемыми разделителями являются косые черты (/), хэш-знаки (#) и тильды (~).

Ответ №2:

Это просто разделитель. Это может быть любая другая пара символов. Все следующие значения одинаковы

 "@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 подробнее.

Ответ №3:

Почти любой символ — при появлении в первой позиции — может быть использован в качестве разделителя 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 не очень приятно, но если вы просто выполняете простые проверки «содержит», обычно это самый простой способ.

Комментарии:

1. спасибо, поскольку эти @ используются в качестве альтернативы / как он ищет текст и тег </td>, когда первый параметр по умолчанию является шаблоном регулярных выражений

2. Поскольку это обычная строка без каких-либо специальных символов, функции регулярных выражений вообще не используются — и из-за этого смотрите вторую часть моего ответа.

Ответ №4:

каждое регулярное выражение должно начинаться и заканчиваться одним и тем же символом. автор данного регулярного выражения решил начинать и заканчивать регулярное выражение знаком @ .