str_replace пробелы с дефисами в атрибуте имени тега - PullRequest
2 голосов
/ 22 октября 2009

$ string = preg_replace ("# [name = ([a-zA-Z0-9 .-] +) *] #", ''. "$ 1", $ string);

Эта часть скрипта не работает:

str_replace(' ', '-', "$1")

Мне нужно заменить "" на "-" , я также пытаюсь preg_replace внутри main preg_replace, str_ireplace также

Но это все еще не работает

Ответы [ 2 ]

5 голосов
/ 22 октября 2009

Замена оценивается заранее, а не при каждой замене. Но вы можете сделать это, используя модификатор e в своем регулярном выражении :

$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#e", '"<td><a href=\"$front_page/".str_replace(" ", "-", "$1")."\">$1</a></td>"', $string);

Или с помощью preg_replace_callback:

function callbackFunction($match) {
    global $front_page;
    return '<td><a href="'.$front_page.'/'.str_replace(" ", "-", $match[1]).'">'.$match[1].'</a></td>';
}
$string = preg_replace_callback("#\[name=([a-zA-Z0-9 .-]+)*]#", 'callbackFunction', $string);
1 голос
/ 22 октября 2009

Полагаю, вам придется сделать это в два этапа, поскольку $1 нельзя использовать в str_replace(). $1 на самом деле не существует как переменная, это только заполнитель в строке замены.

...