Подтвердить что ты не робот

Необязательное прокси-пространство

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

Здесь мой код:

// 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>

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

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

4b9b3361

Ответ 1

Добавьте \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 *, поскольку символы, заключенные в [ и ], являются символьным классом. Класс символов допускает появление любого из его членов один раз (поэтому удалите * из него), и если вы добавите квантификатор (?, +, * и т.д.) После ] любого символа (ов) в классе символов может происходить согласно квантификатору.