对于所有示例,需要'编程'作为输出
示例1:这是编程测试。
REGEX:a + \ sprogramming - Working
示例2:这是一个测试编程。这是一个编程测试
REGEX:a + \ s(?!test)\ sprogramming - Working
示例3:这是测试编程。这是一个基本的编程测试
REGEX:a + \ s(?!test)(。+)\ sprogramming - 不工作
实际O / P:基本的编程
预期的O / P:编程
也就是说,只需打印一次'a'。
提前致谢。
答案 0 :(得分:2)
这是你在找什么?
REGEX : .*(a programming).*
O / p预期:
1.9.3p194 :001 > "This is a test programming. This is a basic a programming test ".match(/.*(a programming).*/)
=> #<MatchData "This is a test programming. This is a basic a programming test " 1:"a programming">
1.9.3p194 :002 > "This is a programming test. ".match(/.*(a programming).*/) => #<MatchData "This is a programming test. " 1:"a programming">
1.9.3p194 :003 > "This is a test programming. This is a programming test ".match(/.*(a programming).*/)
=> #<MatchData "This is a test programming. This is a programming test " 1:"a programming">
答案 1 :(得分:0)
我不确定我理解你的问题。
如果您希望匹配两个单词之间的单词,例如“a”和“test”,那么您可以这样做:
a\s+(\S+)\s+test
(大写字母为“S”的\S
与非 - 空白字符匹配。)
如果您只想要 last 这样的实例,那么:
a\s+(\S+)\s+test(?!.*a\s+(\S+)\s+test)
(请注意否定前瞻声明中的内容是外部部分的副本。)
此外,您还希望使用单词边界,例如
\ba\s+(\S+)\s+test\b(?!.*\ba\s+(\S+)\s+test\b)