2016-09-06 12 views

答えて

2

あなたが行うことができます。

$string = "Track Length (trackLengthFT)"

は、私は、文字列を変換したいです次のように括弧の中にあるものを変換します。 次のコードは、正規表現を使用してこれを行います。あなたは非空の文字列にマッチする例えば

"トラックの長さ(trackLengthFT(45分))"

、ネストされた括弧をサポートする必要はありません提供

$string = preg_replace('/(.*?)(?:\()(.*?)(?:\))/', '$1<div class="parenthesis">($2)</div>', $search); 
+0

問題があり、それを修正するために正規表現を使用する場合、通常2つの問題があります。 :) – Blake

+0

正規表現は、通常、検証と解析に使用されます。彼がちょうど括弧のために彼のウェブサイトを静的に解析し、これらの静的なエントリまたはdbエントリにこれを出力するためにこれを使用するなら、私は彼が大丈夫だと言います。しかし、これを動的に実行するには、ポイントがあります。 – JQluv

+1

それはあまりにも複雑に見えます。理由だけではなく、(\(」、彼は彼が試してみたい場合があることを行うことができ、問題の部品を交換、例えば、 'にpreg_replace(「/\(.+?\)/」、「

$0
」、$文字列)' – Phil

1

カッコ内は/\(.+?\)/と同じくらい簡単です。 lazy repeater.+?は、最後のものではなく最初の ")"で停止するようにワイルドカードに指示します。その後、これらのパターンを検索し、置換文字列に包まれたバージョン

$string = preg_replace('/\(.+?\)/', '<div class="parenthesis">$0</div>', $string); 

$0に置き換えることができ、正規表現にマッチした文字列全体を指します。

デモ〜https://eval.in/636450

1

これは少し冗長、おそらくではなく、正規表現よりも、いくつかのために読みやすいです、それが唯一の文から最後の項目をラップするように、これは非常に柔軟ではありません。

$string = "Track Length (trackLengthFT)"; 
$a_string = explode(' ', $string); 
$last = array_pop($a_string); 
$div = sprintf('<div class="a-class">%s</div>', $last); 
array_push($a_string, $div); 
$final = implode(' ', $a_string); 
// Track Length <div class="a-class">(trackLengthFT)</div> 

これを実行して再利用できる代替方法です。これにより、explodedの最後の項目をspaceで他の関数で囲むことができます。

$wrap_in_div = function($content, $class) { 
    return sprintf('<div class="%s">%s</div>', $class, $content); 
    }; 

    $wrap_last_by_space = function($string) { 
    $explode_string = explode(' ', $string); 
    $last = array_pop($explode_string); 
    return function($fn, $class) use ($explode_string, $last) { 
     $explode_string[] = call_user_func($fn, $last, $class); 
     return implode(' ', $explode_string); 
    }; 
    }; 


    $a = $wrap_last_by_space('Track Length (trackLengthFT)'); 
    $b = $a($wrap_in_div, 'parenthesis'); 

    var_dump($b); 
関連する問題