java正则表达式排除字符怎么定义只替换中间的字符

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Java正则表达式,匹配、替换字符串中的占位符
摘要:有这样一个场景:替换sql字符串中的占位符,`Stringsql=&select*from#{tableName}&;`。有朋友会想直接用String.RepaceAll()替换就可以啦?但是“#{tableName}”是合法值域中的任意一个值,也就是说“#{table}”,“#{table1}”等都是合法的。这时String类的方法就不够使了。下面介绍Pattern和Matcher两个类,用代码演示上述需求:```importjava.util.rege
有这样一个场景:替换sql字符串中的占位符,` String sql = &select* from #{tableName}&;`。
有朋友会想直接用String.RepaceAll()替换就可以啦?但是“#{tableName}”是合法值域中的任意一个值,也就是说“#{table}”,“#{table1}”等都是合法的。
这时String类的方法就不够使了。下面介绍Pattern和Matcher两个类,用代码演示上述需求:
import java.util.regex.M
import java.util.regex.P
* Created by nipin on 16/11/16.
public class Regix {
public static void main(String[] args) {
String sql = &select * from #{tableName}&;
Pattern pattern = Pattern.compile(&(#//{.*//})&);
Matcher matcher = pattern.matcher(sql);
if (matcher.find()) {
System.out.println(matcher.group(0));
sql = matcher.replaceAll(&your_table&);
System.out.println(sql);
![输入图片说明](/2014th7cj/d/file/p/aqnfabayvl.png &在这里输入图片标题&)
[关于更详细的正则表达式介绍](http://www.runoob.com/java/java-regular-expressions.html)
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Java正则表达式,匹配、替换字符串中的占位符相关信息,包括
的信息,所有Java正则表达式,匹配、替换字符串中的占位符相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
InternationalJAVA正则表达式替换字符串问题_百度知道
JAVA正则表达式替换字符串问题
有一个字符串:String str = &第9条,数据错误,错误信息&;现在要将这个字符串中所有的“第*条”都通过替换为“第*行”想用正则表达式实现?如何编写
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
import&java.util.regex.Mimport&java.util.regex.Ppublic&class&TestRegex{public&static&void&main(&String[]&args&){&&&String&regex&=&&第[0-9]*条&;&&&String&str&=&&第9条,数据错误,错误信息,第jjj哦条哦条我的条件如何?第221条xx&;&&&Pattern&pat&=&Pattern.compile(regex);&&&&&Matcher&matcher&=&pat.matcher(str);&&&&&&&&while&(matcher.find())&{&&&&&&String&temp&=&str.substring(matcher.start(),matcher.end());&&&&&str&=&str.replaceAll(temp,&temp.substring(0,temp.lastIndexOf(&条&))+&行&);&&&}&&&&&&&&System.out.println(str);&}}
采纳率:71%
光把&条&替换成&行&会将&有5条&中的&条&也替换成&行&,必须使用模式搜索才能保证正确String ptn = &第\\d*(条)&;Pattern p = Pattern.compile(ptn, Pattern.DOTALL);StringBuffer s = new StringBuffer().append(&xx第9条,数据错误,错误信息, 第112条, no&);Matcher m = p.matcher(s);while(m.find()) {
s = s.replace(m.start(1), m.end(1), &行&);}
public static void main(String[] args) {
String str = &第9条,数据错误,错误信息&;
System.out.println(str.replaceAll(&第\\d行&,&第\\d条&));
你这个靠谱一点。但是替换后的结果是:第d条,数据错误,错误信息。是不是吧中间的值丢了啊????
你这个靠谱一点。但是替换后的结果是:第d条,数据错误,错误信息。是不是吧中间的值丢了啊????
public static void main(String[] args) {
String str = &第92条,数据错误,错误信息&;
System.out.println(str.replaceFirst(&条&,&行&));//正则表达式替换正则表达式不行,最好能够采取first加一个限制,或者用replaceAll(&条&,&行&);
public class TestRegex { public static void main(String[] args) {
String str = &第9条,数据错误,错误信息&;
str = str.replaceAll(&条&, &行&);
System.out.println(str); }}
str.replaceAll(&条&,&行&); so easy!
replaceAll(&条&, “行”)
万一字符串中有个词组是“条件”呢???
其他3条回答
为您推荐:
其他类似问题
您可能关注的内容
正则表达式的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。正则只替换URL字符串里面的汉字部分
URL为 http://192.168.1.1:8080/resources/电话.xls
如果使用 URLEncoder.encode 将会把冒号等一块给替换了
http%3A%2F%2F192.168.1.1%3A8080%2Fresources%2F%E7%94%B5%E8%AF%9D.xls
这并不是我们需要的,我们只希望替换编码里面中文的部分,这里给出了解决方法,很简单
运行结果http://192.168.1.1:8080/resources/%E7%94%B5%E8%AF%9D.xls
关于用正则表达式判定url链接,并排除汉字
正则表达式之Java匹配指定汉字
正则表达式完美解析URL中的各部分
Java正则替换汉字中文字符串
正则表达式:只保留字符串中的汉字和字母
jquery中的替换符合条件的字符串
URL中带特殊字符的处理方式
URL原理、URL编码、URL特殊字符
用正则表达式替换电话号码中间四位
正则表达式取特定字符串中间部分内容
没有更多推荐了,博客分类:
string.replaceAll中的特殊字符
string.replaceAll(String regex, String replacement)中的replacement参数即替换内容中含有特殊字符 $ \ 时,需转义。
* 字符串"$ \"中的$与\字符互换位置
public class SpecialCharReplace {
public static void main(String[] args) {
String str = "$ \\";
* string.replaceAll()中的特殊字符 $ 与 \
* 由于 $ 字符在作为替换内容时,是一个特殊字符,指反向引用前面的分组内容,所以把
* 某字符替换成 $ 字符时,因该在前面加上转义字符 \。
* \ 字符就不用说了,本身就是转义字符,但为什么在作为替换内容时要使用四个 \ 字符
* ,这里又不是用在正则表达式里?这就是因为 \ 字符在作为替换内容里也是一个特殊字
* 符,它用来将前面讲的 $ 字符进行转换的,所以也为特殊字符。以下是replaceAll的
* 源码片断,从源码就可以看出 \$ 是两个特殊字符
* if (nextChar == '\\') {
nextChar = replacement.charAt(cursor);
result.append(nextChar);
* } else if (nextChar == '$') {
// Skip past $
result.append(nextChar);
System.out.println(str.replaceAll("\\$(\\W)\\\\", "\\\\$1\\$"));// \ $
Matcher对象的appendReplacement典型应用与特殊字符&\的进一步分析
问题的提出
字符串模板:
String template="尊敬的客户${customerName}你好!本次消费金额${amount},您帐户${accountNumber}上的余额为${balance},欢迎下次光临!";
其中以 ${ 开始 } 结尾的为待替换的变量域。
数据存放于Map中,key为域名,value为域值。如:
customerName = 刘明
accountNumber =
balance = $
amount = $1000.00
请编写函数:
public static String composeMessage(String template, Map data) throw Exception
实现将任意模板字符串中的变量域,按域名替换为data中的域值。
例如,上例替换结果为:
"尊敬的客户刘明你好!本次消费金额$1000.00,您帐户上的余额为$,欢迎下次光临!"
注:如果Map中找不到域值,以空字符串""替换。
问题的解决
public class RegexExam {
public static void main(String args[]) {
HashMap data = new HashMap();
String template = "尊敬的客户${customerName}你好!本次消费金额${amount},"
+ "您帐户${accountNumber}上的余额为${balance},欢迎下次光临!";
data.put("customerName", "刘明");
data.put("accountNumber", "");
data.put("balance", "$");
data.put("amount", "$1000.00");
System.out.println(composeMessage(template, data));
} catch (Exception e) {
e.printStackTrace();
public static String composeMessage(String template, Map data)
throws Exception {
String regex = "\\$\\{(.+?)\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(template);
* sb用来存储替换过的内容,它会把多次处理过的字符串按源字符串序
* 存储起来。
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String name = matcher.group(1);//键名
String value = (String) data.get(name);//键值
if (value == null) {
value = "";
* 由于$出现在replacement中时,表示对捕获组的反向引用,所以要对上面替换内容
* 中的 $ 进行替换,让它们变成 "\$1000.00" 或 "\$.00" ,这样
* 在下面使用 matcher.appendReplacement(sb, value) 进行替换时就不会把
* $1 看成是对组的反向引用了,否则会使用子匹配项值amount 或 balance替换 $1
* ,最后会得到错误结果:
* 尊敬的客户刘明你好!本次消费金额amount000.00,您帐户上的余额
* 为balance,欢迎下次光临!
* 要把 $ 替换成 \$ ,则要使用 \\\\\\& 来替换,因为一个 \ 要使用 \\\ 来进
* 行替换,而一个 $ 要使用 \\$ 来进行替换,因 \ 与
$ 在作为替换内容时都属于
* 特殊字符:$ 字符表示反向引用组,而 \ 字符又是用来转义 $ 字符的。
value = value.replaceAll("\\$", "\\\\\\$");
//System.out.println("value=" + value);
* 经过上面的替换操作,现在的 value 中含有 $ 特殊字符的内容被换成了"\$1000.00"
* 或 "\$.00" 了,最后得到下正确的结果:
* 尊敬的客户刘明你好!本次消费金额$1000.00,您帐户上的
* 余额为$,欢迎下次光临!
* 另外,我们在这里使用Matcher对象的appendReplacement()方法来进行替换操作,而
* 不是使用String对象的replaceAll()或replaceFirst()方法来进行替换操作,因为
* 它们都能只能进行一次性简单的替换操作,而且只能替换成一样的内容,而这里则是要求每
* 一个匹配式的替换值都不同,所以就只能在循环里使用appendReplacement方式来进行逐
* 个替换了。
matcher.appendReplacement(sb, value);
System.out.println("sb = " + sb.toString());
//最后还得要把尾串接到已替换的内容后面去,这里尾串为“,欢迎下次光临!”
matcher.appendTail(sb);
return sb.toString();
浏览 29002
junJZ_2008
浏览: 1117425 次
来自: 湖南澧縣
引用String a= &abc&,首先在 ...
谢谢分享matcher.appendReplacement(s ...
完全理解,比网上其他资料都要详细
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
package com.
import java.util.regex.P
public class StringUtils {
/**匹配&或全角状态字符或标点*/
public static final String PATTERN="&|[\uFE30-\uFFA0]|‘’|“”";
public static String replaceSpecialtyStr(String str,String pattern,String replace){
if(isBlankOrNull(pattern))
pattern="\\s*|\t|\r|\n";//去除字符串中空格、换行、制表
if(isBlankOrNull(replace))
replace="";
return Pattern.compile(pattern).matcher(str).replaceAll(replace);
public static boolean isBlankOrNull(String str){
if(null==str)
//return str.length()==0?true:
return str.length()==0;
/**清除数字和空格*/
public static
String cleanBlankOrDigit(String str){
if(isBlankOrNull(str))return "null";
return Pattern.compile("\\d|\\s").matcher(str).replaceAll("");
* Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类。
/pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。
大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。\\pP‘’“”]",如果在 JDK 5 或以下的环境中,全角单引号对、双引号对
其他六个是
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符
public static void main(String[] args){
System.out.println(replaceSpecialtyStr("中国电信2011年第一批IT设备集中采购-存储备份&(),)(UNIX服务器",PATTERN , ""));
摘抄:
str = str.replaceAll("[\\pP‘’“”]", "");
Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类。
\pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。
大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。
其他六个是
L:字母;
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符
上面这七个是属性,七个属性下还有若干个子属性,用于更进一步地进行细分。
Java 中用于 Unicode 的正则表达式数据都是由 Unicode 组织提供的。
Unicode 正则表达式标准(可以找到所有的子属性)
http://www.unicode.org/reports/tr18/
各 Unicode 字符属性的定义,可以用一看看某个字符具有什么属性。
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
这个文本文档一行是一个字符,第一列是 Unicode 编码,第二列是字符名,第三列是 Unicode 属性,
以及其他一些字符信息。
浏览 11880
return str.length()==0?true:
这代码写的真别扭,直接
return str.length()==0;不就好了
hi,JetMah,多谢多指点,已更新
浏览: 356997 次
来自: 广州
java过滤emoji字符处理,希望能帮到你http://ww ...
按照楼主这样是可以页面是可以完成效果,但是后台依旧会报错打印出 ...
sunshaoqun 写道二次元 写道希望能分享下.so文件编 ...
二次元 写道希望能分享下.so文件编译源码!求.so源码。。。 ...
多谢,网上说的 “选择你要生成Build.xml文件的项目,右 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 java中字符的定义 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信