Замените img bbcode с необязательной шириной и высотой, используя регулярное выражение?

Я действительно не понимаю правильное решение.

Мой стандартный код замены img:

preg_replace('~\[img](.*?)\[/img\]~s','<img src="$1" />',$text);

Конечно, это работает. Но я пытаюсь заменить bbcode, если ширина и высота установлены. Но это необязательно, поэтому оно также должно работать, если задано только 1 измерение или ничего.

Bbcode выглядит так: [img = 12×12] ссылка на изображение [/ img]

Таким образом, bbcode должен выглядеть так:

 preg_replace('~\[img=(.*?)x(.*?)\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);

Думаю, я ошибся. Anybidy знает, как решить это?

1

Решение

Попробуйте это регулярное выражение:

preg_replace('~\[img=?(\d+)?x?(\d+)?\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);

То, как вы его закодировали, не соответствует всем трем желаемым случаям: [img], [img=NN], а также [img=NNxNN], Это будет соответствовать только в том случае, если оба размера были предоставлены.

1

Другие решения

Ваше регулярное выражение должно определенно работать. Я бы использовал \d+ хотя это гарантирует, что значение существует и имеет числовой тип:

~\[img=(\d+)x(\d+)\](.*?)\[/img\]~s

Какую ошибку вы получаете с вашим кодом, или, скорее, какую строку вы ожидаете, чтобы соответствовать, но вы этого не делаете?

0