2011-01-28 4 views
0

私は以下の文字列に一致するものを見つける正規表現を支援する必要があります。基本的に、私はから「DOG」または「CAT」を返すようにしたい正規表現で特定の文字が含まれていない場合は完全な文字列を取得できますか?

myDOG_test

myCAT_test

これらのパス。

次に、私が望む値の後にアンダースコアを含まない同様の文字列(すべて 'my'で始まる)があります。この場合、完全な文字列をマッチグループに戻したいだけです。

myCentralReports

myDEMO3

これは私がこれまで持っているREGEXPです:

.*?my(.*?)\_.* 

は、これは正しく一致するグループでCAT & DOGを置きますが、私はよ他の2つの文字列に一致する問題があります。明らかに、ハードコーディングされたアンダースコアは、私が始めたことを示すために残されていますが、他の場合にはこれを修正する必要があります。どんな助けもありがとう!ありがとう。

答えて

0
'/\smy(.+?)[_|\s]/' 

これは、空白文字のあとに "my"が続き、次の末尾のアンダースコアまたは空白文字の間に何かを取得します。やってみて。

+0

これは私に良いスタートを与えました。私は可能な限り近づくようになりました。そして、コード内で残りの部分を処理(検索と置換を行う)しました。 – tresstylez

2

ないあなたが正規表現を必要とする理由を確認してください。

explode('_', $string); 

最初の要素がmyDOGまたはmyDEMO3が含まれています。必要に応じて'my'を削除すると、後者のケースで'my'を使用するかどうかは不明です。

あなたが行うことができ
0

$list = array(' myDOG_test', 'myCAT_test',' myCentralReports', 'myDEMO3'); 

foreach($list as $elem) { 
    preg_match("/^\s*my(.+?)(?:_|$)/", $elem, $m); 
    echo "$elem : matches = ";print_r($m); 
} 

出力:

myDOG_test : matches = Array 
(
    [0] => myDOG_ 
    [1] => DOG 
) 
myCAT_test : matches = Array 
(
    [0] => myCAT_ 
    [1] => CAT 
) 
myCentralReports : matches = Array 
(
    [0] => myCentralReports 
    [1] => CentralReports 
) 
myDEMO3 : matches = Array 
(
    [0] => myDEMO3 
    [1] => DEMO3 
) 
関連する問題