2012-03-02 3 views
0

こんにちは、私は特定の文字列「CNAME:」除去するための単一の正規表現を記述する必要があり、以下のような文字列、regexを使用して最後の特定の文字列を削除するにはどうすればよいですか?

$aa = "Ability: N/S,Session: Session #2: Tues June 14th - Fri June 24th (9-2:00PM),Time: 10:30am,cname: karthi"; 

$aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1:30pm,cname: ravi"; 

$aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1am,cname: mathi"; 

持っている点で最大最後に。 は、私は正規表現でこれを行うことができますどのように

$aa = "Ability: N/S,Session: Session #2: Tues June 14th - Fri June 24th (9-2:00PM),Time: 10:30am"; 

    $aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1:30pm"; 

    $aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1am"; 

、のような出力が必要ですか?

+0

最後にカンマの後にすべてを削除しますか? – m0skit0

+0

Btw、 "、cname:"の後ろのすべてを削除しないでください。あなたは最後のセミコロンを残したい。 – m0skit0

+0

@ m0skit0はい。私は最後のカンマの後に削除する必要があります。 –

答えて

1

を参照してください。 strpos()を使用して、 '、cname:'のインデックスを見つけてから、そのインデックスまでsubstr()を見つけることができます。

<?php 

$aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1am,cname: mathi"; 
$pos = strpos($aa, ',cname:'); 
$bb = substr($aa, 0, $pos); 
echo $bb, "\n"; 

いますが、何らかの理由で、このために正規表現を使用して主張すれば、あなたはpreg_replace()を使いたいでしょう:

<?php 

$aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1am,cname: mathi"; 
$bb = preg_replace('#,cname:.*$#', '', $aa); 
echo $bb, "\n"; 

とあなたは、文字列を変更したくない場合preg_match()を使用することもできます。

<?php 

$aa = "Ability: N/S,Session: Session #1: Tues May 31st - Fri June 10th (1-5:30PM),Time: #1 only: 1am,cname: mathi"; 
if (preg_match('#^(.+),cname:.*$#', $aa, $match)) { 
    echo $match[1], "\n"; 
} 
+0

長いコード=潜在的なバグ。正規表現は短くてきれいです。 – m0skit0

+0

正規表現を知っている人にとっては、もっと洗練されたように思えます。正規表現をあまりにも強くしない人にとって、それはちょうどジャンボジャンボのように見えます。また、パフォーマンスに対して議論することもできません。多くの場合、プレーンストリング関数は、正規表現をパフォーマンスよりも凌駕します。この特定の問題については、私は個人的に正規表現を選択していないだろう。 – rodneyrehm

+0

まだ:長いコード=より多くのバグ。技術を知らないことは、それを使用しないことに対する言い訳ではありません。彼らがジャンボジャンボのように見えたら、そうしないと学びます。 – m0skit0

0
/^(.*),cname:.*;$/ 

この正規表現によって生成されたグループ1($ 1)は、あなたに必要な結果を提供します。

+1

OPの文字列にセミコロンはありません。 – DaveRandom

+0

Lol true、編集済みです。 – m0skit0

1

/,cname:.*$/ 

を試してみて、空の文字列に置き換えます。

$result = preg_replace('/,cname:.*$/', '', $aa); 

それをあなたはこのために正規表現を必要としないhere on Regexr

+0

不要な置換え操作。 – m0skit0

0

複数の,cname:...を持っており、ちょうど最後の1を削除したい場合は、この使用:

$aa= preg_replace('/,cname:.*?$/', '', $aa); 
関連する問題