A. 想指教一个java问题——replace(/,/g,"")正则表达式 这个什么意思呀
replace是替换的意思,意思就是把g替换为空
B. java replace 正则表达式
表达方式:
replace方法并不能改变字符串本身的,只是replace方法能返回一个处理后的字符串而已,例如:
String
s="hello";
System.out.println(s.replace("h","H"));
System.out.println(s);
输出结果:
Hello
hello
srcString.replaceAll("[\s()]","_");
\s表示一个空白符;
[\s()]表示
空格
左括号
或者
右括号中出现其中任何一个
replaceAll("[\s()]","_");
即表示用_替代字符串中出现的空格符、左括号、右括号。
C. java replace正则表达式 去掉 "[" 和 “]” 之间的所有字符,包括“ [ ] "本身
Stringcontent="iwantto[thank]you[thank]very" ;
Stringpattern="\[[^\]]+\]";
content=content.replaceAll(pattern,"");
System.out.println(content);
\[ (以 [ 开头)[ ^\] ]+ (不包含 ] 的字符)\]( 以 ] 结尾)
D. java中replace和replaceAll的区别
replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是:
1) replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
2) replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串;
另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;
E. java正则表达式怎么一个个替换匹配的内容
Stringa="我是f_static_000的f_static_001aaaf_static_001";
//正则根据自己需要修改,replaceAll可以使用正则的捕获组功能,$n引用第n个捕获组
/**
replaceAll(regExp,replacement);第一个参数是正则字符串,第二个是替换内容
正则里面有捕获(正则里面用小括号捕获)和引用的功能
*/
a=a.replaceAll("(f_static_\d+)","#[face/png/$1.png]#");
F. JAVA中REPLACE和REPLACEALL的区别 以及一些特殊字符替换
replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
replaceAll的参数是regex,即基于规则表达式的替换,比如:可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串;
不同点:replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如replaceAll("\\d", "*"),而replace则不会,replace("\\d","*")就是替换"\\d"的昌野字符串,而不会解析为正则。
另外还有一个不同点:“\”在Java中是一个转义字符,所以需要用两个代表一个。
例如System.out.println( "\\" ) ;只打印出一个"\"。但是“\”也是正则表达式中的转义字符,需要用两纳迅伏个代表一个。所以:\\\\被java转换成\\,\\又被正则表达式转换成\,因此用replaceAll替换“\”为"\\",就要用replaceAll("洞携\\\\","\\\\\\\\"),而replace则replace("\\","\\\\")。
如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串。
G. java正则表达式多个字符串替换怎样实现
str.replaceAll("[A-Z]+\\d{3}", "hello").replaceAll("[^A-Za-z]", "==");
H. java正则表达式怎么定义只替换中间的字符
可以使用分组来完成,替换字符串中使用$1、$2、$3……可以获取对应组的匹配结果。如果前后的字符串是固定的那更简单,直接在替换的时候写上就好了。
因为String的replaceAll就是使用的正则表达式所以示例直接使用的String的替换,Pattern的替换同理。
publicclassDemo{
publicstaticvoidmain(String[]args){
Stringstr="aa文字1bb哈哈cc测试dx,测试字符串aa1234bb";
//替换aa、bb之间的字符串为"成功"
Stringstr1=str.replaceAll("aa.*?bb","aa成功bb");
System.out.println(str1);
//替换aa、bb之间的字符串为"成功"
Stringstr2=str.replaceAll("(aa).*?(bb)","$1成功$2");
System.out.println(str2);
//替换小写字母之间的字符串为"成功"
Stringstr3=str.replaceAll("([a-z]+).*?([a-z]+)","$1成功$2");
System.out.println(str3);
}
}
I. 写一个java replace函数的正则表达式,将所有0开头的数字中的0替换掉
Stringx="01_03_sfd2ef_10";
Stringreg="0(\d+)";
System.out.println(x.replaceAll(reg,"$1"));
J. java正则表达式如何获取字符串中所有匹配内容
java正则表达式提取需要用到Matcher类。
正则规则就是“一个数字加上大于等于0个非数字再加上结束符”
Pattern pattern
= Pattern.pile("(\d)[^\d]*$")
Matcher matcher
= pattern.matcher(s)
if(matcher.find())
System.out.println
(matcher.group(1)); } }
mport 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.pile("(\d)[^\d]*$");Matcher matcher = pattern.matcher(s);if(matcher.find())System.out.println(matcher.group(1));}}
string pattern=@"<font>(.+?)</font>"
取分组 Match.group[1]
实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test
实现的机制:通过replace的回调函数获取。
可以通过下面的代码获取匹配部分
var str = "abcdefgname='test'sddfhskshjsfsjdfps";
var reg = /name='((w|-|s)+)/ig;
str.replace(reg, function() {
console.log(arguments.length); 5
console.log(arguments[1]);test
});
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
java正则提取需要用到Matcher类,下面给出案例示例供参考
需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6
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.pile("(\d)[^\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()返回匹配到的子字符串
示例代码如下,具体功能请参考注释
Pattern p=Pattern.pile(“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
另外,Mathcer类中start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
示例如下:
Pattern p=Pattern.pile(“([a-z]+)(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,返回第二组匹配到的子字符串
注意: 只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用。
针对你的问题:
<aa>是给数组命名
(?<name>subexpression)
其中name是有效的组名称,而subexpression是任何有效的正则表达式模式。 name不得包含任何标点符号字符,并且不能以数字开头。
这个方式相当于下面这个表达式
"(?<!0-9a-zA-Z)([0-9]|[a-z]|[A-Z]){1,}"
String str = "我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.";
d 表示0-9 任意一个数字 后面有+号 说明这个0-9单个数位出现一到多次 比如21312314
String reg = "\d+";
Pattern是一个正则表达式经编译后的表现模式。
Pattern pattern = Pattern.pile (reg);
Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。
Matcher matcher = pattern.matcher (str);
只有执行了find()方法 后,状态机matcher才是真正开始进行匹配工作的!
while (matcher.find ())
{
matcher.group()返回匹配到的子字符串
System.out.println (matcher.group ());
}
}
正则表达式为:.*a.*b.*c.*
package .test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
/**
* @param args
*/
public static void main(String[] args) {
TODO Auto-generated method stub
String source = "abcdefg
" +
"uaibec
" +
"wabbcd
" +
"adb
" +
"acb";
String regex = "(.*a.*b.*c.*)";
Pattern pattern = Pattern.pile(regex,Pattern.MULTILINE);
Matcher matcher = pattern.matcher(source);
while(matcher.find()){
System.out.println(matcher.group());
}
}
}
你可以直接复制出来,运行一下就可以了