1

という単語を含む行を選択する必要がありoneますanother。行は、次のような json 文字列から生成されます。

{"Name" : "one", "LastError" : "No error", "ID" : 1000 , "Comment" : "no comment"} //YES
{"Name" : "one", "LastError" : "No error", "ID" : 1000 , "Comment" : "another"} //NO because there is 'one' and 'another'

私はphpとpreg_matchを使用しています。

私は次のようなものを使用しようとしています:

if (preg_match('/one.*(?!another)/i',$row_string) > 0)
{
  //no draw
}
else
{
  //Draw something
}

先読みは何もしていないようです。

4

2 に答える 2

7

あなたの正規表現

/one.*(?!another)/

は、文字列の後に任意の数の文字が続くことを意味し、後の文字列は一致してはなりませんone.*another

.*基本的に文字列の最後まで一致するため、その後に。は続きませんanother

実際に必要なのは、文字列のone後に任意の数の文字を続けることです。各文字の後に。を続けることはできませんanother

これは機能します:

/one(.(?!another))*$/

$、アサーションがに続くすべての文字に対してテストされることを確認しますone

oneそれ自体の前にがないことを確認するanotherには、直後にアサーションを追加する必要がありoneます。

/one(?!another)(.(?!another))*$/
于 2012-07-05T16:14:11.353 に答える
0

oneのみNameですか?もしそうなら、json_decode($json, true).

于 2012-07-05T16:47:44.690 に答える