How can I get string between two characters [string] ? PHP

后端 未结 2 1482
鱼传尺愫
鱼传尺愫 2021-01-01 03:34
$string1 = \"This is test [example]\";
$string2 = \"This is test [example][2]\";
$string3 = \"This [is] test [example][3]\";

How can I get the foll

相关标签:
2条回答
  • 2021-01-01 04:23
    preg_match_all('/\[([^\]]+)\]/', $str, $matches);
    
    php > preg_match_all('/\[([^\]]+)\]/', 'This [is] test [example][3]', $matches);
    php > print_r($matches);
    Array
    (
        [0] => Array
            (
                [0] => [is]
                [1] => [example]
                [2] => [3]
            )
    
        [1] => Array
            (
                [0] => is
                [1] => example
                [2] => 3
            )
    
    )
    

    And here's the explanation for the rregex:

    \[ # literal [
    ( # group start
        [^\]]+ # one or more non-] characters
    ) # group end
    \] # literal ]
    
    0 讨论(0)
  • 2021-01-01 04:37

    For those wary of regex, here's a solution sans that crazy regex syntax. :-) It used to really irritate me that something like this wasn't native to PHP's string functions so I built one...

    // Grabs the text between two identifying substrings in a string. If $Echo, it will output verbose feedback.
    function BetweenString($InputString, $StartStr, $EndStr=0, $StartLoc=0, $Echo=0) {
        if (!is_string($InputString)) { if ($Echo) { echo "<p>html_tools.php BetweenString() FAILED. \$InputString is not a string.</p>\n"; } return; }
        if (($StartLoc = strpos($InputString, $StartStr, $StartLoc)) === false) { if ($Echo) { echo "<p>html_tools.php BetweenString() FAILED. Could not find \$StartStr '{$StartStr}' within \$InputString |{$InputString}| starting from \$StartLoc ({$StartLoc}).</p>\n"; } return; }
        $StartLoc += strlen($StartStr);
        if (!$EndStr) { $EndStr = $StartStr; }
        if (!$EndLoc = strpos($InputString, $EndStr, $StartLoc)) { if ($Echo) { echo "<p>html_tools.php BetweenString() FAILED. Could not find \$EndStr '{$EndStr}' within \$InputString |{$InputString}| starting from \$StartLoc ({$StartLoc}).</p>\n"; } return; }
        $BetweenString = substr($InputString, $StartLoc, ($EndLoc-$StartLoc));
        if ($Echo) { echo "<p>html_tools.php BetweenString() Returning |'{$BetweenString}'| as found between \$StartLoc ({$StartLoc}) and \$EndLoc ({$EndLoc}).</p>\n"; }
        return $BetweenString; 
    }
    

    Of course this can be condensed quite a bit. To save someone else the effort of cleaning it up:

    // Grabs the text between two identifying substrings in a string.
    function BetweenStr($InputString, $StartStr, $EndStr=0, $StartLoc=0) {
        if (($StartLoc = strpos($InputString, $StartStr, $StartLoc)) === false) { return; }
        $StartLoc += strlen($StartStr);
        if (!$EndStr) { $EndStr = $StartStr; }
        if (!$EndLoc = strpos($InputString, $EndStr, $StartLoc)) { return; }
        return substr($InputString, $StartLoc, ($EndLoc-$StartLoc));
    }
    
    0 讨论(0)
提交回复
热议问题