Помогите с регулярными выражениями на PHP

12
Оу!
На сайте с 19.12.2007
Offline
221
964

вот такой пример текста:


<response>
<errors>
<error>
invalid code
</error>
</errors>
</response>

я составил вот такой код:

  $pattern = '/\s*\<response\>\s*\<errors\>\s*\<error\>\s*([^\s]*)\s*\<\/error\>\s*\<\/errors\>\s*\<\/response\>\s*/mi';

$replacement = "\$1";
$message = preg_replace($pattern, $replacement, $data);

подскажите. пожалуйста. где ошибка?

Лучшие мобильные прокси тут: https://goo.su/pU6uat
Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#1

Шаблон в регулярке какбе мимо кассы.

skAmZ
На сайте с 04.09.2009
Offline
122
#2

Оу!, вы ищите <errors>, которого у вас в исходном тексте вообще нет.

P.S. для xml лучше использовать что-нибудь готовое. simplexml_load_string к примеру.

Оу!
На сайте с 19.12.2007
Offline
221
#3

прошу прощения - вставил не тот текст.

посмотрите ещё раз первый пост.

RO
На сайте с 13.07.2009
Offline
88
#4
skAmZ:
Оу!, вы ищите <errors>, которого у вас в исходном тексте вообще нет.

P.S. для xml лучше использовать что-нибудь готовое. simplexml_load_string к примеру.

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

Оу!
На сайте с 19.12.2007
Offline
221
#5
skAmZ:
P.S. для xml лучше использовать что-нибудь готовое. simplexml_load_string к примеру.

можете подсказать где найти или привидите пример готового кода как из simplexml_load_string извлечь данные?

PR
На сайте с 30.12.2007
Offline
93
#6

$data = '<response>

<errors>
<error>
invalid code
</error>
</errors>
</response>';

$xml = simplexml_load_string($data);
$errors = (array) $xml->errors;

echo $errors['error'];
RO
На сайте с 13.07.2009
Offline
88
#7
Оу!:
можете подсказать где найти или привидите пример готового кода как из simplexml_load_string извлечь данные?

$str="<response>

<errors>

<error>

invalid code

</error>

</errors>

</response>";

$a=simplexml_load_string($str);

echo $a->errors->error;

skAmZ
На сайте с 04.09.2009
Offline
122
#8
Оу!:
прошу прощения - вставил не тот текст.


$pattern = '!\s*<response>\s*<errors>\s*<error>(.*?)</error>\s*</errors>\s*</response>\s*!msi';
$replacement = "$1";
$message = preg_replace($pattern, $replacement, $data);

P.S. лучше через xml как в примерах выше.

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#9

([^\s]*) - любое количество непробельных символов.

сторока "invalid code" содержит пробельный символ.

И наверное надо с модификаторами поиграться, в частности s добавить.

RO
На сайте с 13.07.2009
Offline
88
#10
Алексей Барыкин:
([^\s]*) - любое количество непробельных символов.
сторока "invalid code" содержит пробельный символ.

плохому учите.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий