JAVA正则表达式问题请教

mdn2010 2018-11-14 07:14:50
<%@page contentType="text/html;charset=gbk" pageEncoding="gbk"%>

<%@ page contentType="text/xml" pageEncoding = "gbk" %> //其它GBK不要替换

请问如何在JAVA中通过正则表达式的技术将上述gbk全替换为UTF-8?
1、只有charset=gbk 或 pageEncoding="gbk" 这样的情况的 GBK才替换
2、gbk 大小写无关
3、=号左右允许有空格
4、charset= 后的gbk左右无双引号,pageEncoding="gbk" 的GBK左右有双引号
谢谢!
...全文
59 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

 String result=testStr.replaceAll("\\b((?:pageEncoding|encoding)\\s*=\\s*)(?i)\"gb(?:k|2312)\"","$1\"UTF-8\"")
				 .replaceAll("\\b(charset\\s*=\\s*)(?i)gb(?:k|2312)", "$1UTF-8");
mdn2010 2018-11-16
  • 打赏
  • 举报
回复
引用 6 楼 LinBilin_ 的回复:

 String result=testStr.replaceAll("\\b((?:pageEncoding|encoding)\\s*=\\s*)(?i)\"gb(?:k|2312)\"","$1\"UTF-8\"")
				 .replaceAll("\\b(charset\\s*=\\s*)(?i)gb(?:k|2312)", "$1UTF-8");
谢谢!
qybao 2018-11-15
  • 打赏
  • 举报
回复
你这种情况应该改分两步replace,第一步charset,替换为无双引号的utf-8(不管本身有没有双引号),第二步pageEncoding,替换为有双引号的utf-8(不管本身有没有双引号) 因为你的 "<%@ page contentType=\"text/html; charset=Gbk\" pageEncoding=gbK %>"; pageEncoding后本身就不带双引号 也就是你要$1UTF-8决定是否加双引号
mdn2010 2018-11-15
  • 打赏
  • 举报
回复
引用 2 楼 hattah 的回复:
Pattern p= Pattern.compile("(charset\\s*=\\s*|pageEncoding\\s*=\\s*\")gbk\"",Pattern.CASE_INSENSITIVE); 。。。。。 Matcher m=p.matcher(str); String result = m.replaceAll("$1UTF-8\"");
是否需要引号是和前面的单词有关的 charset 的不需要,pageEncoding 的需要
mdn2010 2018-11-15
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
你这种情况应该改分两步replace,第一步charset,替换为无双引号的utf-8(不管本身有没有双引号),第二步pageEncoding,替换为有双引号的utf-8(不管本身有没有双引号) 因为你的 "<%@ page contentType=\"text/html; charset=Gbk\" pageEncoding=gbK %>"; pageEncoding后本身就不带双引号 也就是你要$1UTF-8决定是否加双引号
pageEncoding后不带双引号 的我想就不替换,因为不符合要求
hattah 2018-11-14
  • 打赏
  • 举报
回复
Pattern p= Pattern.compile("(charset\\s*=\\s*|pageEncoding\\s*=\\s*\")gbk\"",Pattern.CASE_INSENSITIVE);
。。。。。
Matcher m=p.matcher(str);
String result = m.replaceAll("$1UTF-8\"");
mdn2010 2018-11-14
  • 打赏
  • 举报
回复
代码: Pattern p=Pattern.compile("((?:charset|encoding|pageEncoding)\\s*=\\s*\\\"?)gbk",Pattern.CASE_INSENSITIVE); String str="<?xml version=\"1.0\" encoding=\"GBK\" ?>// encoding = \"gbk\"//\n"+ "<%@ page language=\"java\" contentType=\"text/html; charset=GBK\" pageEncoding=\"gbk\"%>\n" + "<%@ page contentType=\"text/html; charset=Gbk\" pageEncoding=gbK %>"; Matcher m=p.matcher(str); String result = m.replaceAll("$1UTF-8"); System.out.println("--- result=\n"+result); 结果: --- result= <?xml version="1.0" encoding="UTF-8" ?>// encoding = "UTF-8"// <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding=UTF-8 %> 不符合第4点要求

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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