我试图能够匹配如下的短语:
I request a single car
// or
I request a single person
// or
I request a single coconut tree
但不是
I request a single car by id
// nor
I request a single person by id with friends
// nor
I request a single coconut tree by id with coconuts
这样的工作:
/^I request a single person(?!\s+by id.*)/
对于这样的字符串:
I request a single person
I request a single person with friends
但是当我用匹配器(。*)替换这个人或者将$添加到结尾时,它就会停止工作:
/^I request a single (.*)(?!\s+by id.*)$/
我如何才能完成此操作,但仍然会在第一场比赛中匹配所有在否定前瞻之前?
答案 0 :(得分:1)
/^I request a single (?!.*by id.*)(.*[^\s])?\s*$/
答案 1 :(得分:1)
)
中没有(
与(.*\)
匹配"I request a single car by idea" =~ /^I request a single (?!.*by id.*)(.*)$/
#=> nil
。自从你测试以来,也许这是一个错字。然而,在确定之后,仍然存在问题:
r = /^I request a single (?!.+?by id\b)/
据推测,那应该是一场比赛。如果您只想知道是否匹配,可以使用:
"I request a single car by idea" =~ r #=> 0
"I request a single person by id with friends" =~ r #=> nil
然后:
\b
"single "
匹配分词,其中包括前一个字符是字符串中最后一个字符的情况。请注意,如果您只是在检查匹配项,那么除了否定前瞻之外,不需要包含任何内容。
如果您希望在匹配时返回r = /^I request a single (?!.+?by id\b)(.*)/
"I request a single coconut tree"[r,1] #=> "coconut tree"
"I request a single person by id with friends"[r,1] #=> nil
后面的内容,请使用:
{{1}}