Я действительно не понимаю правильное решение.
Мой стандартный код замены 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 знает, как решить это?
Попробуйте это регулярное выражение:
preg_replace('~\[img=?(\d+)?x?(\d+)?\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);
То, как вы его закодировали, не соответствует всем трем желаемым случаям: [img]
, [img=NN]
, а также [img=NNxNN]
, Это будет соответствовать только в том случае, если оба размера были предоставлены.
Ваше регулярное выражение должно определенно работать. Я бы использовал \d+
хотя это гарантирует, что значение существует и имеет числовой тип:
~\[img=(\d+)x(\d+)\](.*?)\[/img\]~s
Какую ошибку вы получаете с вашим кодом, или, скорее, какую строку вы ожидаете, чтобы соответствовать, но вы этого не делаете?