我希望在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);
任何想法为什么?
对不起的第一条消息感到抱歉。
答案 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