我希望在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