1

正規表現を実行したいコンテンツは次のとおりです。

[NON-CA]
This is for Non CA
<b> In a New Line </b> 
[/NON-CA]
[CA]
This is for CA
[/CA]

カナダの国コードに基づいてコンテンツを削除したいので、ユーザーがカナダの場合はそのCA部分のみが表示され、他のユーザーはそのNON-CA部分のみが表示されます。タグ間のコンテンツには、改行、スペース、特殊文字、HTML マークアップ、HTML エンティティなどを使用できます。ここに私が書いたコードがあります:

<?php
    $content = "[NON-CA]This is for Non CA<b> In a New Line </b> [/NON-CA]    [CA]This is for CA[/CA]";
    $CApattern = "~\[CA\](.*?)\[/CA\]~";
    $NonCApattern = "~\[NON-CA\](.*?)\[/NON-CA\]~";                       
    $NonCApatternsReplacement = array();
    $Replacepatterns = array();        
    $Replacepatterns[] = "~\[CA\]~";
    $Replacepatterns[] = "~\[/CA\]~";
    $NonCApatternsReplacement[] = "~\[NON-CA\]~";
    $NonCApatternsReplacement[] = "~\[/NON-CA\]~"; 

    if($country_code ==  "CA"){ //if its the user of country Canada remove the NON-CA Tag                                
        $result_p1 = preg_replace($NonCApattern, "", $content, -1, $count);                                                                                                                                
        $result_p2 = preg_replace($Replacepatterns, "", $result_p1, -1);
     }
     else{ //if user is not from CANADA remove CA tag and Text                                     

        $result_p1 = preg_replace($NonCApatternsReplacement, "", $content, -1);                                                             
        $result_p2 = preg_replace($CApattern,"", $result_p1, -1, $count);                                                                                                                     
     } 
     echo $result_p2
?>

したがって、カナダのユーザーが来た場合、コンテンツは次のようになります。

[NON-CA]
This is for Non CA
<b> In a New Line </b> 
[/NON-CA]
This is for CA

実際には次のようになります。

This is for CA

カナダ人以外のユーザーが到着すると、結果のテキストは次のようになります。

This is for Non CA
<b> In a New Line </b>     
[CA]
This is for CA
[/CA]

実際には次のようになります。

This is for Non CA
<b> In a New Line </b>   

条件に従って、それぞれのユーザーに表示されるべきではないコンテンツの一部を置換/削除することではありません。私の正規表現に何か問題がありますか?

4

2 に答える 2