寻找“a-Z,a-Z”的正则表达式问题

时间:2011-11-09 15:03:23

标签: php regex preg-replace preg-match

我希望在Oliver和Roy之前找到以下字符串中的逗号

"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 个答案:

答案 0 :(得分:3)

您的正则表达式正在查找开头只有a-z的文本,逗号和a-z。这与您的字符串不匹配,您应该删除字符串字符的开头(^)和结尾($)。

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

答案 1 :(得分:3)

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

/"([^,]+?),(.+?)"/
  • " = quote
  • [^,]+?, =在第一个逗号之前不是逗号的任何内容
  • .+?" =其他任何内容,直到下一个引用

请注意,逗号左侧和右侧的字符串由(...)构造捕获。这意味着,如果表达式匹配,则左侧的字符串将分配给\1,而右侧的字符串将分配给\2。因此,如果您想用left; right之类的内容替换它,可以使用:

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

如果你只想保留左边和右边的部分而不用中间的逗号,你可以简单地用左边的部分替换表达式,然后是空格,然后是右边的部分。

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

答案 2 :(得分:0)

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

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

这样您就可以使用$1$2

重复使用逗号周围的捕获字词

here on Regexr

相关问题