Удалить запятую между двумя конкретными символами - PullRequest
6 голосов
/ 25 июня 2010

У меня в настоящее время есть строка:

"Blah, blah, blah,~Part One, Part Two~,blah blah"

Мне нужно убрать запятую между символом ~, чтобы он читался.

"Blah, blah, blah,~Part One Part Two~,blah blah"

Может кто-нибудь помочь мне, пожалуйста?

Большое спасибо,

Ответы [ 3 ]

6 голосов
/ 25 июня 2010

Если между ~ с и четным числом ~ с есть ровно одна запятая, то

preg_replace("/~([^,]*),([^,]*)~/", "~\1\2~", $text) 

должно сделать это.

1 голос
/ 25 июня 2010

Это может быть проще сделать за несколько шагов:

  • Разделить на ~
  • Преобразовать части, которые находятся "внутри" только ~
    • Просто замените ',' на ''
  • Соедините детали вместе с ~

Решением регулярного выражения

Тем не менее, можно сделать в регулярном выражении, предполагая четное число ~:

<?php

echo preg_replace(
   '/(^[^~]*~)|([^~]*$)|([^,~]*),|([^,~]*~[^~]*~)/',
   '$1$2$3$4',
   'a,b,c,~d,e,f~,g,h,i,~j,k,l,~m,n,o~,q,r,~s,t,u'
);

?>

Приведенные выше отпечатки ( как виднона codepad.org ):

a,b,c,~def~,g,h,i,~jkl~m,n,o~qr~s,t,u

Как это работает

Есть 4 случая:

  • Мы находимся в начале строки, "снаружи"
    • Просто сопоставьте, пока мы не найдем первое ~, поэтому в следующий раз мы будем "внутри"
    • Итак, (^[^~]*~)
  • Больше нет ~ до конца строки
    • Если будет четное число ~, мы будем "снаружи"
    • Просто совпадать доend
    • Итак, ([^~]*$)
  • Если это не так, мы "внутри"
    • Продолжайте находить следующую запятую до ~ (поэтому мы все еще "внутри")
      • Итак, ([^,~]*),
    • Если мы найдем~ вместо запятой, затем выйдите, затем вернитесь к следующему ~
      • Итак, ([^,~]*~[^~]*~)

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

Ссылки

0 голосов
/ 25 июня 2010
$string = "Blah, blah, blah,~Part One, Part Two~,blah blah";
$pos1 = strpos($string, "~");

$substring = substr($string, $strpos, strlen($string));
$pos2 = strpos($string, "~");

$final = substr($substring, $pos1, $pos2);
$replaced = str_replace(",", "", $final);

$newString = str_replace($final, $replaced, $string);
echo $newString;

Это делает работу, но я написал это прямо здесь, и могут возникнуть проблемы (по крайней мере, проблемы с производительностью).

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