Необязательное Регулярное выражение с пробелами
У меня проблема с тем, чтобы игнорировать пробелы между определенными символами. Я гуглил несколько дней и, похоже, не могу найти правильного решения.
Вот мой код:
// 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>
(Обратите внимание на отсутствие пробела между шириной="" и высотой="".)
Можно ли в любом случае игнорировать пробелы между этими персонажами? Поскольку я не эксперт по регулярным выражениям.
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 * в качестве символов, заключенных в [
и ]
, является классом символов. Класс символов допускает вхождение любого из его членов один раз (поэтому удалите из него *
) и если вы добавите квантор (?
, +
, *
и т.д.) после ]
любой символ(ы) в классе символов может встречаться в соответствии с квантором.