[求助] 一个正则表达式

影儿 2011-03-29 10:32:33

请教诸位大虾:

要判断给定文本不包含某单词的 正则表达式,应该如何写 ?

比如 给定文本 “ i have a dream that ” , 要判断它不包含 单词 dream .

具体应用背景: 关于规则文件解析的

rule XXX1
when YYY1
then ZZZ1
end

rule XXX2
when YYY2
then ZZZ2
end

希望 将每个 rule-end 提取出来 。

如果单纯写成 \\s*rule(.*)when(.*)then(.*)end 是不行的,因为会匹配成

rule( XXX1 when ... XXX2) when YYY2 then ZZZ2 end ,这样就无法提取出每个 rule-end 规则了。

我的思路是编写正则表达式: \\s*rule(判断文本XXX1不包含单词rule的正则表达式)when(判断文本YYY1不包含单词when的正则表达式)then(判断文本ZZZ1不包含单词then的正则表达式) ; 但一时不知道括号里的正则表达式怎么写。

在线等赐教,先谢过了!~~~

...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
影儿 2011-03-29
  • 打赏
  • 举报
回复
非常感谢你提供的思路!~~~
knightzhuwei 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shuqin1984 的回复:]

引用 5 楼 knightzhuwei 的回复:

引用 3 楼 shuqin1984 的回复:

引用 2 楼 shuqin1984 的回复:

引用 1 楼 knightzhuwei 的回复:

非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end
哦,对非贪婪匹配有所耳闻, 但一直不知其具体含义, 谢谢指点
还请帮忙思考下第一个……
[/Quote]

public class Test {
public static void main(String[] args) {
String a="I have a dream!";
String b="I have a drea!";
System.out.println(a.matches("^(?!.*?dream).*$"));//false
System.out.println(b.matches("^(?!.*?dream).*$"));//true
}
}
影儿 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 knightzhuwei 的回复:]

引用 3 楼 shuqin1984 的回复:

引用 2 楼 shuqin1984 的回复:

引用 1 楼 knightzhuwei 的回复:

非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end
哦,对非贪婪匹配有所耳闻, 但一直不知其具体含义, 谢谢指点
还请帮忙思考下第一个问题: 判断给定文本不包含给定单词的 正则表达式; 感觉……
[/Quote]哈哈,果然震惊!~~~ 不过, 否定判断要写在正则表达式里面, 而不是在外面做否定判断, 即希望是如下形式 if ("text".matches("regex")) 而不是 if (!("text".matches("regex")))
影儿 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 knightzhuwei 的回复:]

引用 3 楼 shuqin1984 的回复:

引用 2 楼 shuqin1984 的回复:

引用 1 楼 knightzhuwei 的回复:

非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end
哦,对非贪婪匹配有所耳闻, 但一直不知其具体含义, 谢谢指点
还请帮忙思考下第一个问题: 判断给定文本不包含给定单词的 正则表达式; 感觉……
[/Quote]哈哈,果然震惊!~~~ 不过, 否定判断要写在正则表达式里面, 而不是在外面做否定判断, 即希望是如下形式 if ("text".matches("regex")) 而不是 if (!("text".matches("regex")))
knightzhuwei 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shuqin1984 的回复:]

引用 2 楼 shuqin1984 的回复:

引用 1 楼 knightzhuwei 的回复:

非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end
哦,对非贪婪匹配有所耳闻, 但一直不知其具体含义, 谢谢指点
还请帮忙思考下第一个问题: 判断给定文本不包含给定单词的 正则表达式; 感觉应该比较简单, 但一时转不过弯来
[/Quote]
String a=“ i have a dream that ”;
if(a.matches(".*dream.*"))//这个是判断匹配
if(!a.matches(".*dream.*"))//这个就是判断不匹配了
影儿 2011-03-29
  • 打赏
  • 举报
回复
如果: rule ---> ( , when ---> [ , then ---> ] , end ---> )
那么, 这就是一个 ([])([])...([]) 的匹配问题了, 看上去有点像嵌套和递归, 实际上又不像, 看上去是一类问题中的特殊形式,
影儿 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shuqin1984 的回复:]

引用 1 楼 knightzhuwei 的回复:

非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end
哦,对非贪婪匹配有所耳闻, 但一直不知其具体含义, 谢谢指点
[/Quote]还请帮忙思考下第一个问题: 判断给定文本不包含给定单词的 正则表达式; 感觉应该比较简单, 但一时转不过弯来
影儿 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 knightzhuwei 的回复:]

非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end
[/Quote]哦,对非贪婪匹配有所耳闻, 但一直不知其具体含义, 谢谢指点
knightzhuwei 2011-03-29
  • 打赏
  • 举报
回复
非贪婪匹配不就行了

\\s*rule(.*?)when(.*?)then(.*?)end

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧