如何用条件替换字符串中的字符
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;
我有一个字符串 $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;