2011-11-09 2 views
0

Я ищу, чтобы найти запятую после Оливер и перед Роем в следующей строкерегулярного выражения вопроса с поиском «Аз, Az»

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

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

Я использую следующий Regex

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

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

Это мой код

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

Любые идеи, почему?

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

+0

между Оливером и Роем есть две запятые, какой из них вы хотите найти? или это так? – SERPRO

+0

Пожалуйста, улучшите свой вопрос. –

+0

Показать свой код. Что не работает?Какая замена, какой ожидаемый результат? Почему эти две запятые отличаются от первых двух запятых, которые вы не хотите заменять? – stema

ответ

3

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

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

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

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

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

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

Это сработало, однако, когда я использую preg_replace, можно сохранить строку до запятой и после нее? он работал, однако я потерял строку до и после, например: «Имя пользователя, Hello Person Oli,; roy, Roy» - это то, что осталось с –

+0

@OliverBS, обновленный ответ. – rid

+0

Отличное спасибо :) @Radu –

3

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

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

Использование preg_replace позволяет сохранить строку до и после запятой? он работал, однако я потерял строку до и после –

+0

, например: «Имя пользователя, Hello Person Oli,; roy, Roy» - это то, что осталось сейчас –

+0

@OliverBS см. мой ответ, вам нужно сделать две группы для захвата групп. – stema

0

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

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

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

Смотреть это here on Regexr

Смежные вопросы