Необязательное Регулярное выражение с пробелами


У меня проблема с тем, чтобы игнорировать пробелы между определенными символами. Я гуглил несколько дней и, похоже, не могу найти правильного решения.

Вот мой код:

// Get Image data
preg_match('#<a href="(.*?)" title="(.*?)"><img alt="(.*?)" src="(.*?)"[\s*]width="150"[\s*]height="(.*?)"></a>#', $data, $imagematch);
$image = $imagematch[4];

В основном это некоторые из сценариев, которые у меня есть:

 <a href="/wiki/File:Sky1.png" title="File:Sky1.png"><img alt="Sky1.png" src="http://media-mcw.cursecdn.com/thumb/5/56/Sky1.png/150px-Sky1.png"width="150" height="84"></a>

(Обратите внимание на отсутствие пробела между width="" и src="")

И

<a href="/wiki/File:TallGrass.gif" title="File:TallGrass.gif"><img alt="TallGrass.gif" src="http://media-mcw.cursecdn.com/3/34/TallGrass.gif" width="150"height="150"></a>

(Обратите внимание на отсутствие пробела между шириной="" и высотой="".)

Можно ли в любом случае игнорировать пробелы между этими персонажами? Поскольку я не эксперт по регулярным выражениям.

Author: Alex Ananjev, 2013-01-12

1 answers

Добавьте \s?, если можно разрешить пробел.

\ s обозначает пустое пространство

? говорит, что предыдущий символ может встречаться один раз или не встречаться.

Если допускается более одного пробела и это необязательно, используйте \s*.

* говорит, что предыдущий символ может встречаться ноль или более раз.

'#<a href\s?="(.*?)" title\s?="(.*?)"><img alt\s?="(.*?)" src\s?="(.*?)"[\s*]width\s?="150"[\s*]height\s?="(.*?)"></a>#'

Допускает необязательный пробел между именем атрибута и =.

Если вы также хотите добавить необязательный пробел после =, добавьте \s? и после него тоже.

Аналогично, везде, где у вас есть необязательные символы, вы можете использовать ?, если максимальное вхождение равно 1 или *, если максимальное вхождение не ограничено, после необязательного символа.

И ваша фактическая проблема заключалась в [\s*], которая вызывает появление пробела или a * в качестве символов, заключенных в [ и ], является классом символов. Класс символов допускает вхождение любого из его членов один раз (поэтому удалите из него *) и если вы добавите квантор (?, +, * и т.д.) после ] любой символ(ы) в классе символов может встречаться в соответствии с квантором.

 72
Author: Naveed S, 2013-01-12 12:19:55