PHP regex help - Найти совпадение в другом совпадении и заменить что-то - PullRequest
1 голос
/ 03 марта 2010

ребята, у меня есть массивы, в которых я должен сопоставить этот тип текста, а затем удалить пробелы между словами,

 Name:'lofse erbbnwq qweqw-qweqw' KKK
 Name:'lofsdsse erbsdsdbnwq sds sdsd sdqwsdseqw-qwsdseqw' KKK
 Name:'lofsse esdsdbnwq sds sds sddseqw-qwseqw' KKK



 i read somewhere that it will work like this, but i tried and its not working :(

$data = preg_replace_callback('%Name:\'(.*)\' kkk%',replace_within_tag, $data);
function replace_within_tag($groups) {return preg_replace('/\s/', '.', $groups[0]);}

вывод должен быть таким

 Name:'lofse.erbbnwq.qweqw-qweqw' KKK
 Name:'lofsdsse.erbsdsdbnwq.sds.sdsd.sdqwsdseqw-qwsdseqw' KKK
 Name:'lofsse.esdsdbnwq.sds.sds.sddseqw-qwseqw' KKK

пожалуйста, мне нужна небольшая помощь по этому вопросу, просто скажите мне, как это сделать

Ответы [ 2 ]

1 голос
/ 03 марта 2010
$array=array("Name:'lofse erbbnwq qweqw-qweqw' KKK", "Name:'lofsdsse erbsdsdbnwq sds sdsd sdqwsdseqw-qwsdseqw' KKK","Name:'lofsse esdsdbnwq sds sds sddseqw-qwseqw' KKK");
foreach ($array as $k=>$v){
  if ( strpos($v,"Name:" ) !==FALSE) {
        $s = explode("'",$v);
        $s[1]=preg_replace("/\s+/",".",$s[1]);
        $array[$k]=implode("'",$s);
  }
}
print_r($array);

выход

$ php test.php
Array
(
    [0] => Name:'lofse.erbbnwq.qweqw-qweqw' KKK
    [1] => Name:'lofsdsse.erbsdsdbnwq.sds.sdsd.sdqwsdseqw-qwsdseqw' KKK
    [2] => Name:'lofsse.esdsdbnwq.sds.sds.sddseqw-qwseqw' KKK
)
0 голосов
/ 03 марта 2010

Сгруппируйте совпадение и затем используйте $matches[1] в обратном вызове, чтобы заменить только пробелы в части текста между кавычками. У вас есть несколько способов сделать это. Например:

$output = preg_replace_callback("!(Name:')(.*?)(' KKK)!", 'replace_spaces', $input);

function replace_spaces($matches) {
  return $matches[1] . preg_replace('!\s+!', '.', $matches[2]) . $matches[3];
}

Вы должны сделать это, потому что вы захватываете ведущие и конечные строки. Альтернативный способ - захватывать меньше. Например:

$output = preg_replace_callback("!(?<=').*?(?=')!", 'replace_spaces', $input);

function replace_spaces($matches) {
  return preg_replace('!\s+!', '.', $matches[0]);
}

Это использует lookaheads и lookbehinds .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...