#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:
каждое регулярное выражение должно начинаться и заканчиваться одним и тем же символом. автор данного регулярного выражения решил начинать и заканчивать регулярное выражение знаком @
.