3

からの正規表現を使用していますが、これは角かっこ内のテキストのみを抽出しますが、完全に削除したいと思います。

if( preg_match( '!\(([^\)]+)\)!', $text, $match ) )
    $text = $match[1];

例:my long text string (with another string)

どうすれば入手することができますか:

$var1 = "my long text string";
$var2 = "with another string";
4

7 に答える 7

12
// This is all you need
<?php $data = explode('(' , rtrim($str, ')')); ?>

例:

<?php
$str = 'your long text string (with another string)';
$data = explode('(' , rtrim($str, ')'));    

print_r($data);


// output 

// Array
// (
//     [0] => my long text string 
//     [1] => with another string
// )
// profit $$$$

?>
于 2013-03-12T11:06:07.187 に答える
4
$data = preg_split("/[()]+/", $text, -1, PREG_SPLIT_NO_EMPTY);
于 2013-03-12T11:07:33.193 に答える
1

これは非常に詳細なコードです...もっと短くすることができます...

<?php
$longtext = "my long text string (with another string)";
$firstParantheses = strpos($longtext,"(");

$firstText = substr($longtext,0,$firstParantheses);

$secondText = substr($longtext,$firstParantheses);

$secondTextWithoutParantheses = str_replace("(","",$secondText);
$secondTextWithoutParantheses = str_replace(")","",$secondTextWithoutParantheses);

$finalFirstPart = $firstText;
$finalSecondPart = $secondTextWithoutParantheses;

echo $finalFirstPart." ------- ".$finalSecondPart;
?>
于 2013-03-12T11:09:18.027 に答える
1

以下のコードを使用できます。$out[0][0]ただし、実際にとが存在するかどうかを確認するには、追加のチェックが必要であることに注意してください。$out[0][1]

    <?php
    $string = "my long text string (with another string)";
    preg_match_all("/(.*)\((.*)\)/", $string, $out, PREG_SET_ORDER);
    print_r($out);
    /*
    Array
    (
            [0] => Array
                    (
                            [0] => my long text string (with another string)
                            [1] => my long text string 
                            [2] => with another string
                    )

    )
    */

    $var1 = $out[0][1];
    $var2 = $out[0][2];
    //$var1 = "my long text string";
    //$var2 = "with another string";
    ?>
于 2013-03-12T11:01:02.293 に答える
1

私は正規表現が苦手ですが、これを試すことができます。

$exp=explode("(", $text);
$text1=$exp[0];
$text2=str_replace(array("(",")"), array('',''), $exp[1]);
于 2013-03-12T11:01:33.757 に答える
1
'([^\)]+)\(([^\)]+)\)'

!-charsを削除し、別の変数フィールド(brackets-areaの名前?)とその準備完了:)を追加するだけです。

http://www.solmetra.com/scripts/regex/index.phpは、いくつかのテストをすばやく実行するために知っておく価値があります。

于 2013-03-12T11:03:04.317 に答える
0

この回避策を使用してみませんか:

$vars = explode('@@', str_replace(array('(', ')'), '@@', $text));

角かっこを@@に置き換えてから、テキストを配列に分解します。さらに、array_filterを使用して、空の可能性のある位置を削除できます。

于 2013-03-12T11:00:17.813 に答える