如何用条件替换字符串中的字符

how to replace characters in string with a condition

我有一个字符串 $IDN,如下所示:

C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5

我正在使用 preg_replace, 替换为新行,但我意识到 , 包含在某些组织名称中,并且它会截断组织名称。

我用这个: $IDN = preg_replace('/, /u', "\r", $IDN);

我要这样结束:

C=US
O=VeriSign
Inc.
OU=VeriSign Trust Network
OU=(c) 2006 VeriSign
Inc. - For authorized use only
CN=VeriSign Class 3 Public Primary Certification Authority - G5

代码按预期执行,但如您所见,"VeriSign, Inc." 被切碎,Inc 移至新行。

有什么避免这种情况的建议吗?我正在考虑以某种方式过滤掉 , Inc 但不确定如何去做。

最终,我希望它看起来像这样:

C=US
O=VeriSign, Inc.
OU=VeriSign Trust Network
OU=(c) 2006 VeriSign, Inc. - For authorized use only
CN=VeriSign Class 3 Public Primary Certification Authority - G5

使用分隔符列表 'C='、'O='、'OU' 和 'CN'。之后只需从每行的末尾删除 ', '。

http://php.net/manual/ru/function.strtr.php

<?php
$array_s = array('C=' => "\n", 'O=' => "\n", 'OU=' => "\n", 'CN=' => "\n"); // main separators
$string = "C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5";
echo strtr(strtr($string, $array_s), array(", \n" => "\n"));
?>

如果您想在输出字符串中保留分隔符,请使用此数组:

$array_s = array('C=' => "\nC=", 'O=' => "\nO=", 'OU=' => "\nOU=", 'CN=' => "\nCN=");

您可以使用negative lookahead,即:

$string = "C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5";
$result = preg_replace('/,\s+(?!Inc.)/', "\r", $string );
echo $result;