Регулярное выражение с поиском "aZ, aZ" - PullRequest
0 голосов
/ 09 ноября 2011

Я хочу найти запятую после Оливера и Роя в следующей строке

"Username,Hello Person Oli,"Oliver,Who" roy,Roy"

Я хочу заменить эту Oliver,Who

Я использую следующее регулярное выражение

'/^"(?:[a-zA-Z]+)(?:,+)(?:[a-zA-Z]+)"$/'

Однако он не работает с preg_replace

Это мой код

$pregData   = preg_replace('/^"(?:[a-zA-Z]+)(?:,+)(?:[a-zA-Z]+)"$/',';',$csv);

Есть идеи, почему?

Извините за плохое первое сообщение.

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011

Для учета других символов, кроме a-z, вы можете использовать:

/"([^,]+?),(.+?)"/
  • " = цитата
  • [^,]+?, = все, что не являетсязапятая до первой запятой
  • .+?" = все остальное до следующей кавычки

Обратите внимание, что строка слева и справа от запятой захвачена (...)строит.Это означает, что при совпадении выражения строка слева будет присвоена \1, а строка справа будет присвоена \2.Поэтому, если вы хотите заменить это на что-то вроде left; right, вы можете использовать:

preg_replace('/"([^,]+?),(.+?)"/', '\1; \2', $csv)

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

preg_replace('/"([^,]+?),(.+?)"/', '\1 \2', $csv)
3 голосов
/ 09 ноября 2011

Ваше регулярное выражение ищет текст только с a-z в начале, запятой и a-z снова.Это не соответствует вашей строке, вы должны удалить начало (^) и конец ($) строковых символов.

/"(?:[a-zA-Z]+)(?:,+)(?:[a-zA-Z]+)"/
0 голосов
/ 09 ноября 2011

Если вы хотите заменить только запятую, то вам нужно, помимо двух неправильных якорей, захватить внешние группы.

'/"([a-zA-Z]+)(?:,+)([a-zA-Z]+)"/'

Так что вы можете повторно использовать захваченные слова вокруг запятой, используя $1 и $2

См. здесь, на Regexr

...