正则表达式如何匹配小括号

yuchuang_06 2009-11-27 11:07:41
比如有一个字符串:
String str = "start(aaa)";

pattern我写成这样:
java.util.regex.Pattern p = java.util.regex.Pattern.compile("^values(aaa)&");

boolean b = str.matches(str);
System.out.println(b);


打印出来的是:false
我想知道pattern如何写,b的值才能等于true
在线等,谢谢!!!!
...全文
63679 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanghuashuiyue 2012-08-11
  • 打赏
  • 举报
回复
public class ReTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "--More--(222%)";
Pattern pattern = Pattern.compile("--More--\\(\\d{1,3}%\\)");
Matcher macher = pattern.matcher(str);
System.out.println(macher.matches());

}

}
forever_1123 2012-07-31
  • 打赏
  • 举报
回复
大侠们也帮我分析一下我的问题吧,谢谢
java正则挖取建表语句:
-------------------------------------------------
-- Export file for user SSTEST --
-- Created by SINO_PING on 2012-7-30, 18:16:27 --
-------------------------------------------------

spool ciinsureriskwarning.log

prompt
prompt Creating table CIINSURERISKWARNING
prompt ==================================
prompt
create table CIINSURERISKWARNING
(
DEMANDNO VARCHAR2(50) not null,
SERIALNO NUMBER not null,
RISKWARNINGTYPE VARCHAR2(2),
CLAIMCODE VARCHAR2(50),
COMPANYID VARCHAR2(8),
ACCIDENTTIME VARCHAR2(20),
ACCIDENTPLACE VARCHAR2(100)
)
;
comment on column CIINSURERISKWARNING.DEMANDNO
is '查询码';
comment on column CIINSURERISKWARNING.SERIALNO
is '序号';
comment on column CIINSURERISKWARNING.RISKWARNINGTYPE
is '风险警示类型';
comment on column CIINSURERISKWARNING.CLAIMCODE
is '理赔编号';
comment on column CIINSURERISKWARNING.COMPANYID
is '保险公司代码';
comment on column CIINSURERISKWARNING.ACCIDENTTIME
is '出险时间';
comment on column CIINSURERISKWARNING.ACCIDENTPLACE
is '查询码';
alter table CIINSURERISKWARNING
add constraint PK_CIINSURERISKWARNING primary key (DEMANDNO, SERIALNO);
create table CIINSURERISKWARNING
(
DEMANDNO VARCHAR2(50) not null,
SERIALNO NUMBER not null,
RISKWARNINGTYPE VARCHAR2(2),
CLAIMCODE VARCHAR2(50),
COMPANYID VARCHAR2(8),
ACCIDENTTIME VARCHAR2(20),
ACCIDENTPLACE VARCHAR2(100)
)
;

spool off

我的代码
Pattern p = Pattern.compile("(create table \\w+\\s*\\(.+\\);)");
Matcher m = p.matcher(buffer.toString());
while(m!=null && m.find()) {
System.out.println(m.group());
}
输出结果:
create table CIINSURERISKWARNING( DEMANDNO VARCHAR2(50) not null, SERIALNO NUMBER not null, RISKWARNINGTYPE VARCHAR2(2), CLAIMCODE VARCHAR2(50), COMPANYID VARCHAR2(8), ACCIDENTTIME VARCHAR2(20), ACCIDENTPLACE VARCHAR2(100));comment on column CIINSURERISKWARNING.DEMANDNO is '查询码';comment on column CIINSURERISKWARNING.SERIALNO is '序号';comment on column CIINSURERISKWARNING.RISKWARNINGTYPE is '风险警示类型';comment on column CIINSURERISKWARNING.CLAIMCODE is '理赔编号';comment on column CIINSURERISKWARNING.COMPANYID is '保险公司代码';comment on column CIINSURERISKWARNING.ACCIDENTTIME is '出险时间';comment on column CIINSURERISKWARNING.ACCIDENTPLACE is '查询码';alter table CIINSURERISKWARNING add constraint PK_CIINSURERISKWARNING primary key (DEMANDNO, SERIALNO);create table CIINSURERISKWARNING( DEMANDNO VARCHAR2(50) not null, SERIALNO NUMBER not null, RISKWARNINGTYPE VARCHAR2(2), CLAIMCODE VARCHAR2(50), COMPANYID VARCHAR2(8), ACCIDENTTIME VARCHAR2(20), ACCIDENTPLACE VARCHAR2(100));

我想要的是只把建表语句挖出来,如下:
create table CIINSURERISKWARNING( DEMANDNO VARCHAR2(50) not null, SERIALNO NUMBER not null, RISKWARNINGTYPE VARCHAR2(2), CLAIMCODE VARCHAR2(50), COMPANYID VARCHAR2(8), ACCIDENTTIME VARCHAR2(20), ACCIDENTPLACE VARCHAR2(100));

请高手指点一下,我的正则表达式为什么达不到目标那,谢谢
阿宝洁猪 2012-07-31
  • 打赏
  • 举报
回复

String str = "create table CIINSURERISKWARNING( DEMANDNO VARCHAR2(50) not null, SERIALNO NUMBER not null, RISKWARNINGTYPE VARCHAR2(2), CLAIMCODE VARCHAR2(50), COMPANYID VARCHAR2(8), ACCIDENTTIME VARCHAR2(20), ACCIDENTPLACE VARCHAR2(100));comment on column CIINSURERISKWARNING.DEMANDNO is '查询码';comment on column CIINSURERISKWARNING.SERIALNO is '序号';comment on column CIINSURERISKWARNING.RISKWARNINGTYPE is '风险警示类型';comment on column CIINSURERISKWARNING.CLAIMCODE is '理赔编号';comment on column CIINSURERISKWARNING.COMPANYID is '保险公司代码';comment on column CIINSURERISKWARNING.ACCIDENTTIME is '出险时间';comment on column CIINSURERISKWARNING.ACCIDENTPLACE is '查询码';alter table CIINSURERISKWARNING add constraint PK_CIINSURERISKWARNING primary key (DEMANDNO, SERIALNO);create table CIINSURERISKWARNING( DEMANDNO VARCHAR2(50) not null, SERIALNO NUMBER not null, RISKWARNINGTYPE VARCHAR2(2), CLAIMCODE VARCHAR2(50), COMPANYID VARCHAR2(8), ACCIDENTTIME VARCHAR2(20), ACCIDENTPLACE VARCHAR2(100));";

Pattern p = Pattern.compile("create\\s*table\\s*\\w+\\s*[(].+?[)]\\s*[)]");
Matcher m = p.matcher(str);
if(m.find()){
System.out.println(m.group());
}
zhuzhusany 2009-11-27
  • 打赏
  • 举报
回复
boolean b = str.matches("start\\(aaa\\)",str);
不对应该是
boolean b = p.matches("start\\(aaa\\)",str);
。。。
xiaotian521 2009-11-27
  • 打赏
  • 举报
回复
我建议你去google里面搜索“转义字符”的写法,
里面有很多的列表,好好学学吧!
zhuzhusany 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yuchuang_06 的回复:]
Pattern p = Pattern.compile("start\\(aaa\\)");
String str = "start(aaa)";
boolean b = str.matches(str);
System.out.println(b);

b的值依然是false
[/Quote]
boolean b = str.matches("start\\(aaa\\)",str);
或者
Pattern p = Pattern.compile("start\\(aaa\\)");
String str = "start(aaa)";
Matcher m=p.matcher(str);
System.out.println(m.find());



GreenVesture 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yuchuang_06 的回复:]
Pattern p = Pattern.compile("start\\(aaa\\)");
String str = "start(aaa)";
boolean b = str.matches(str);
System.out.println(b);

b的值依然是false
[/Quote]
你代码写的有问题,str.matches(str)这是干什么?简单点直接写System.out.println(str.matches(("start\\(aaa\\)"));
yuchuang_06 2009-11-27
  • 打赏
  • 举报
回复
Pattern p = Pattern.compile("start\\(aaa\\)");
String str = "start(aaa)";
boolean b = str.matches(str);
System.out.println(b);

b的值依然是false
GreenVesture 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yuchuang_06 的回复:]
说错了
\\
不是对 反斜杠 做转义吗?
[/Quote]
没错,\在java中本身也是转义符嘛....你要用\这个字符,当然要转义了...
yuchuang_06 2009-11-27
  • 打赏
  • 举报
回复
说错了
\\
不是对 反斜杠 做转义吗?
GreenVesture 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yuchuang_06 的回复:]
\\
不是对小括号转义吗?
[/Quote]

就应该转义.....小括号在正则表达式的作用是标记一个子表达式的开始和结束位置...你要表达其它意思自然要转义..
yuchuang_06 2009-11-27
  • 打赏
  • 举报
回复
\\
不是对小括号转义吗?
zhuzhusany 2009-11-27
  • 打赏
  • 举报
回复
\\(\\)
hbgzg3006 2009-11-27
  • 打赏
  • 举报
回复
转意一下就行了 \\(\\)就可以匹配小括号
shan1119 2009-11-27
  • 打赏
  • 举报
回复
Pattern p = Pattern.compile("start[(]aaa[)]");

62,614

社区成员

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

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