2015-05-13 24 views
-2

我有一個字符串$ 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 

的代碼做什麼它是假設,但你可以看到「威瑞信公司」被切碎,Inc被移動到一個新的行。

任何建議,以避免這種情況?我在想方設法過濾, Inc但不知道如何去做。

最後,我希望它結束​​了看起來像這樣:的分隔符 'C =', 'O =', 'OU' 和 'CN'

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 
+0

請發佈明確輸入/輸出樣本。即:「我有這個」和「我需要這個」 –

+0

當然,我更新了這篇文章。 – user3436467

回答

2

使用名單。之後,從每行結尾刪除','。

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="); 
+0

這是一個偉大的想法作爲分隔符總是相同的..任何樣品如何做到這一點?我認爲這種方法是最可靠的。 – user3436467

+0

非常感謝,我會測試一下並且很快回復 – user3436467

+0

更新的答案。在開始混淆如何回答)) –

1

您可以使用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; 
+0

感謝您的示例。我剛剛從@Dioni Btter看到了使用分隔符列表的一個音符 - 這聽起來更加可靠,因爲它涵蓋了所有的情況,而不是限制爲「Inc」 – user3436467

+0

很高興它解決了。 –

+0

尚未解決..仍然需要看到該代碼的工作示例。我會在臨時 – user3436467