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 回答