查找"的正则表达式问题a-Z, a-Z "


regex issue with finding " a-Z , a-Z "

我希望在Oliver之后和Roy之前找到逗号

"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);

知道为什么吗?

要考虑除a-z以外的其他字符,您可以使用:

/"([^,]+?),(.+?)"/
  • " = quote
  • [^,]+?, =直到第一个逗号
  • .+?" =任何东西,直到下一个报价

注意,逗号左边和右边的字符串是由(...)结构捕获的。这意味着,如果表达式匹配,那么左边的字符串将被分配给'1,而右边的字符串将被分配给'2。因此,如果您想将其替换为left; right之类的内容,您可以使用:

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

如果您只想保留左右部分,而不希望中间有逗号,则可以简单地将表达式替换为左部分,后跟空格,再后跟右部分。

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

您的regex正在寻找开头只有a-z,逗号和a-z的文本。这与你的字符串不匹配,你应该删除字符串字符的开始(^)和结束($)。

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

如果您只想替换逗号,那么除了两个错误的锚外,还需要捕获外部组。

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

这样你就可以使用$1$2来重复使用逗号周围捕获的单词

查看Regexr