正则表达式 的反向引用问题

chendabian 2008-05-17 12:48:53
F=1|a H=(*F)* T=FH
G=(+T)*
请问TG的表达试用反向引用 怎么表达?


F=(i|a)
T=(i|a)(\\*\1)* 这样可以吗?


...全文
140 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
anqini 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 chendabian 的回复:]
你说的那个不是我要的 就是我要的!!
没关系的^^
那不是重点

[/Quote]

String g = "a(*a))(+a(*a)))";
String p = "(i|a)(\\(\\*\\1\\)*)(\\(\\+\\1\\2\\))*";
System.out.println(g.matches(p));
chendabian 2008-05-17
  • 打赏
  • 举报
回复
你说的那个不是我要的 就是我要的!!
没关系的^^
那不是重点
kevin_sage 2008-05-17
  • 打赏
  • 举报
回复
haotie
anqini 2008-05-17
  • 打赏
  • 举报
回复

//我最后一次挑战了。。。眼睛都花了。。。
String g = "a(*a)(+a(*a))";
String p = "(i|a)(\\(\\*\\1\\))*(\\(\\+\\1\\2*\\))*";
结果为true
chendabian 2008-05-17
  • 打赏
  • 举报
回复
现在我把TG 写出来
你看看对吗?
TG=FH G
=F (*F)* G
=F(*F)* (+F(*F)*)*

得到以上表达式 现在只有F=(i ¦a)
要怎样写以上表达式?


(i|a)\\(\\*\\1\\)* ( \\(\\+\\1\\(\\*\\1\\)*\\) )*



你说咱们能不能把 (*F)*也 做为一个引用组呢?
这写的多麻烦啊
anqini 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chendabian 的回复:]
我错了 大哥
还不行吗?
[/Quote]

我没怎么呀,只是咱俩的想法老是有冲突~
你这么写的话,匹配这样的~因为你红色不分是普通的括号,所以后面的\\)*匹配,这个括号)出现0次或者多次


String g = "+a(*a))";//匹配这样的~这应该不是你要的吧~
String p = "(\\+(i|a)\\(\\*\\2\\)*)*";
System.out.println(g.matches(p));


chendabian 2008-05-17
  • 打赏
  • 举报
回复
我错了 大哥
还不行吗?
chendabian 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anqini 的回复:]
Java code
String p = "(\\+(i|a)(\\*\\2)*)*";
[/Quote]
这里的"(\\+(i|a)\\(\\*\\2\\)*)*";
anqini 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chendabian 的回复:]
G=\\+(i ¦a)\\(\\*\\1\\)*\\)* 这样写对不对? 题目中的* + 在()里面的为普通字符;()外面的是闭包
[/Quote]
首先,你这个匹配括号树木都不对!
还有,*和+都是普通字符?
chendabian 2008-05-17
  • 打赏
  • 举报
回复
G=\\+(i ¦a)\\(\\*\\1\\)*\\)* 这样写对不对? 题目中的* + 在()里面的为普通字符;()外面的是闭包
anqini 2008-05-17
  • 打赏
  • 举报
回复

String G = "(+F(*F)* )*";
String f = "a";
String g = "+a*a*a";
String F = "i|a";
String p = "(\\+(i|a)(\\*\\2)*)*";
System.out.println(g.matches(p));
System.out.println(f.matches(F));
chendabian 2008-05-17
  • 打赏
  • 举报
回复
可以这样理解:
G=(+T)*
=(+FH)*
=(+F(*F)* )*

得到以上表达式 现在只有F=(i ¦a)

如何用F表示以上的表达式?
anqini 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 chendabian 的帖子:]
F=1 ¦a H=(*F)* T=FH
G=(+T)*
请问TG的表达试用反向引用 怎么表达?


F=(i ¦a)
T=(i ¦a)(\\*\1)* 这样可以吗?
[/Quote]

G=(\\+(i ¦a)(\\*\\2))*

我不会了,但是按照你的思路来,应该改为这样
chendabian 2008-05-17
  • 打赏
  • 举报
回复
G要引用T T引用F 就是引用套引用
这个我不大确定怎么写;
G=(\\+(i ¦a)(\\*\1))*
这样是不是就不是引用F了呢?

该怎么办呢?
anqini 2008-05-17
  • 打赏
  • 举报
回复
首先我是没明白你的意思

要说明的是反向因用要用\\1,不是单\1

62,614

社区成员

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

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