java正则表达式提取括号中的内容(JAVA的正则表达式可不可以把括号内匹配的内容提取出来)

本文目录
- JAVA的正则表达式可不可以把括号内匹配的内容提取出来
- java 一段字符串中,如何得到大括号内的字符
- java正则表达式 获取方括号里的所有字符(方括号包含在内),去掉方括号以外的所有字符,求解
- Java中怎么截取括号中的内容放到list里
- java 用正则表达式如何获取网页background:url(),或background-image:url()括弧里面的内容
- java正则表达式的怎么提取两个字符之间的值
- 求助 java正则表达式将括号里的内容提取出来
JAVA的正则表达式可不可以把括号内匹配的内容提取出来
用group(index)可以取到匹配到的内容。
input.replaceAll(regex, "{$1,$2,$3,$4}")
java 一段字符串中,如何得到大括号内的字符
Java类实现:
import javax.swing.JOptionPane;
public class PrintBraces {
public static void main(String ag){
int fromIndex1=0,fromIndex2=0;
String text=JOptionPane.showInputDialog("Input a text: ");
try{
while(fromIndex1!=-1&&fromIndex2!=-1){
fromIndex1=text.indexOf("{",fromIndex1+1);
fromIndex2=text.indexOf("}",fromIndex2+1);
System.out.println(text.substring(fromIndex1+1, fromIndex2));
}}catch(Exception ep){
}
}
}
正则实现:
(\{*\})+
java正则表达式 获取方括号里的所有字符(方括号包含在内),去掉方括号以外的所有字符,求解
String str = "aaaadsfkasdjf";
String r = str.replaceAll("^.*\\.*", "");
如果要,无非在r两边加上就行了,这样做最简单了,呵呵。
Java中怎么截取括号中的内容放到list里
采用正则表达式来处理;
例子如下 :
String s="dsaf(323)ldsao,(sd)"; \\示例文本
String pattern="(\\(+\\))"; \\正则表达式,匹配括号内容
ArrayList list=new ArrayList();
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(s);
while(m.find()){
list.add(m.group());
}
java 用正则表达式如何获取网页background:url(),或background-image:url()括弧里面的内容
可以用如下正则:
/.*background+)\).*/gi
给你两个例子:
javascript:alert(’background-image:url(aa.jpg)’.replace(/.*background+)\).*/gi,’$1’));
javascript:alert(’background:#FFFFFF url(bb.jpg);color:#FF0000;’.replace(/.*background+)\).*/gi,’$1’));
java正则表达式的怎么提取两个字符之间的值
实现方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args) {
String s = "A876X";
// 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来
// 在这里,我们要提取最后一个数字,正则规则就是“一个数字加上大于等于0个非数字再加上结束符”
Pattern pattern = Pattern.compile("(\\d)*$");
Matcher matcher = pattern.matcher(s);
if(matcher.find())
System.out.println(matcher.group(1));
}
}
关于Matcher 中的几个方法说明:
Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
Java代码示例:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“aaa2223bb”);
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223
Mathcer m2=p.matcher(“2223bb”);
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m2.end(); //返回4
m2.group(); //返回2223
Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出错,因为不匹配返回false
m3.matches(); //匹配整个字符串
m3.start(); //返回0
m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串
m3.group(); //返回2223
说了这么多,相信大家都明白了以上几个方法的使用,该说说正则表达式的分组在java中是怎么使用的.
start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
Java代码示例:
?
1
2
3
4
5
6
7
8
9
10
Pattern p=Pattern.compile(“(+)(\d+)”);
Matcher m=p.matcher(“aaa2223bb”);
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串
现在我们使用一下稍微高级点的正则匹配操作,例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
Java代码示例:
?
1
2
3
4
5
Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com”);
while(m.find()) {
System.out.println(m.group());
}
输出:
456456
0532214
123
如将以上while()循环替换成
?
1
2
3
4
5
while(m.find()) {
System.out.println(m.group());
System.out.print(“start:”+m.start());
System.out.println(” end:”+m.end());
}
则输出:
456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39
现在大家应该知道,每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.
注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用。
求助 java正则表达式将括号里的内容提取出来
1.就用LS的例子来改进吧,LS的例子用正则匹配的捕获型,也就是说除了捕获了/patroninfo~S0*chx/1069163/modpinfo,还捕获了带单引号的 ’/patroninfo~S0*chx/1069163/modpinfo‘ (输出 System.out.println(mat.group(0) 就是);
这样无论在效率还是安全性上都有欠缺。
2 Pattern.compile("\\’(.*?)\\’")也可以改为Pattern pat = Pattern.compile("\’(.*?)\’"),减少代码冗余和理解复杂度。
捕获用法:
public class Test {
public static void main(String args) {
String str = "《a href=\"#\" onClick=\"return open_new_window( ’/patroninfo~S0*chx/1069163/modpinfo’ )\"》";
Pattern pat = Pattern.compile("\’(.*?)\’");
Matcher mat = pat.matcher(str);
if (mat.find()) {
System.out.println(mat.group(1));
}
}
}
非捕获方法:
public class Test {
public static void main(String args) {
String str = "《a href=\"#\" onClick=\"return open_new_window( ’/patroninfo~S0*chx/1069163/modpinfo’ )\"》";
Pattern pat = Pattern.compile("(?《=\’).*(?=\’)");
Matcher mat = pat.matcher(str);
if (mat.find()) {
System.out.println(mat.group(0));
}
}
}

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40







