2016-06-12 27 views
-1

今、私はpreg_matchに問題があります。正規表現内での2つの正規表現テスト

これは文字列の例です: "!asksheet!H69 = var8949"、この行に複数のvar8949またはH69インデックスが存在することもあります。その結果、これは私の一部である "var33333 = var8949"

ことshoud:

preg_match_all('#\b\!(.*)\![A-Z]{1,3}\d+\b#', $output, $matches2); 
    foreach ($matches2[0] as $match2) { 
    $result6 = $db->query("SELECT varid FROM variablen WHERE varimportedindex = '".$match2."' AND projectid = $pid AND varsheetname LIKE '%".$match2."%' "); 
    $rowoperation2 = $result6->fetch_assoc(); 
    if ($rowoperation2['varid'] != "" AND $rowoperation2['varid'] != "0") { 
     $output2 = preg_replace("#\b\!(.*)\![A-Z]{1,3}\d+\b#", "var".$rowoperation2['varid']."", $output); 
    } 
    } 

誰かが、おそらく助けることができますか? 、代わりにpreg_match_allの、あなたはワード境界と感嘆符をエスケープする必要はありません必要はありませんあなたが探している文字列を、簡単なpreg_matchを使用していないのはなぜ

は、 よろしく オラフ

+0

あなたの例の文字列にそのような値 'var33333'はありません、なぜそれが結果にあるべきですか? – RomanPerekhrest

+0

その値はdbからクエリされ、値の例は –

+0

です。解決策を知りません。-1とはどういう意味ですか? –

答えて

1

をありがとうグループ1及び2にあります。

$str = '"!asksheet!H69=var8949"'; 
preg_match('#!(.*?)!([A-Z]{1,3}\d+)#', $str, $m); 
print_r($m); 

出力:

Array 
(
    [0] => !asksheet!H69 
    [1] => asksheet 
    [2] => H69 
)