正则表达式问题 ' " \

问题描述

代码如下:System.out.println("'");System.out.println("\'");System.out.println("\'");System.out.println("\"");String a = "'"";System.out.println("1" + a.replace("'", "'"));System.out.println("2" + a.replace("'", "\'"));System.out.println("3" + a.replace("'", "\'"));System.out.println("4" + a.replace("'", "\\'"));System.out.println("5" + a.replaceAll(""", "\""));System.out.println("6" + a.replaceAll(""", "\\""));运行结果:'''"1'"2'"3'"4\'"5'"6'"问题:3中第二个参数字面值为',结果输出为';为啥5中第二个参数字面值为",结果输出不是"而是"?怎么想都想不明白啊。

解决方案

1、 ' 和 ' --都输出--> ' 也就是写不写都一样2、"3" + a.replace("'", "\'")3\'" ---> 3'" 即\ --> '--->' "--->"3、replaceAll是正则表达式替换"5" + a.replaceAll(""", "\"")即public String replaceAll(String regex, String replacement) { return Pattern.compile(regex).matcher(this).replaceAll(replacement);}---------->public String replaceAll(String replacement) { reset(); boolean result = find(); if (result) { StringBuffer sb = new StringBuffer(); do { appendReplacement(sb, replacement); result = find(); } while (result); appendTail(sb); return sb.toString(); } return text.toString(); }重点是 public Matcher appendReplacement(StringBuffer sb, String replacement) { // If no match, return error if (first < 0) throw new IllegalStateException("No match available"); // Process substitution string to replace group references with groups int cursor = 0; StringBuilder result = new StringBuilder(); while (cursor < replacement.length()) { char nextChar = replacement.charAt(cursor); if (nextChar == '\') { cursor++; nextChar = replacement.charAt(cursor); result.append(nextChar); cursor++; } else if (nextChar == '$') { // Skip past $ cursor++; // A StringIndexOutOfBoundsException is thrown if // this "$" is the last character in replacement // string in current implementation, a IAE might be // more appropriate. nextChar = replacement.charAt(cursor); int refNum = -1; if (nextChar == '{') { cursor++; StringBuilder gsb = new StringBuilder(); while (cursor < replacement.length()) { nextChar = replacement.charAt(cursor); if (ASCII.isLower(nextChar) || ASCII.isUpper(nextChar) || ASCII.isDigit(nextChar)) { gsb.append(nextChar); cursor++; } else { break; }此处红色部分 即如果匹配\ 那么跳过,则5'\" ---> 5'"--得到-->5'"
解决方案二:
System.out.println("5" + a.replaceAll(""", "\""));这里面替换相当于把 " 替换成 " ;之前a中的"相当于"所以出去是 5'"
解决方案三:
引用3中第二个参数字面值为',结果输出为';为啥5中第二个参数字面值为",结果输出不是"而是"?怎么想都想不明白啊。那是因为你只想到第3行的“\'”中的反斜杠是转义字符。却没有意识到第5行的第2个参数中的“'”,这里面的反斜杠也是个转义字符。也就是说 "'" 和 "'" 在内存中的表示是完全一样的。System.out.println("'" .equals( "'" )) ===> true
解决方案四:
[url]http://cadillac.iteye.com/blog/553187[/url],希望能帮到你。

时间: 2024-11-02 01:53:49

正则表达式问题 &#039; &amp;quot; \的相关文章

大家帮我看看这个正则表达式 /[!@#$%^&amp;amp;amp;*()~`+&amp;#039;;:&amp;amp;quot;,./&amp;amp;lt;&amp;amp;gt;?{}()-]/

问题描述 大家帮我看看这个正则表达式 /[!@#$%^&*()~`+';:",./<>?{}()-]/ 有什么错误?我都搞了两天了找不出来是哪儿错了.原句:// patrn=/[']+[!]?[@]+[;]+[:]+[+]+[=]+[-]+[#]+[[]+[]]+[%]+[^]+[&]++[(]+[)]+[~]+[`]+[]+[]+[?]+[<]+[>]+[/]+[,]+["]+[.]+[{]+[}]+[>]+[<]+[f]+[n]+

求正则表达式 包含除&amp;amp;quot;and&amp;amp;quot;和&amp;amp;quot;of&amp;amp;quot;以外的连续字母和数字的表达式

问题描述 在版主的帮助下,原先已经整理成这样的一个正则表达式@"d+|[a-zA-Z]+|p{IsGreek}+"已经能够把连续的英文字母(不限长度),数字(不限长度),希腊字母(不限长度)作为一个最小单位抽取出来.想在提高一下,多一个要求,抽出来的英文不能包含"and"和"of"譬如β-and-8'-carotenal要匹配到3个:β8carotenal但是包含在连续英文字母中的and和of不要剔除譬如β-8'-andblueof要匹配到3个:

&amp;amp;#x27; &amp;amp;lt; &amp;amp;gt; &amp;amp;quot; % &amp;amp;amp; \ 如何判断text输入不否包含这几个字符的正则表达式 好像ValidationExpression=&amp;amp;quot;^[&amp;amp;#x27;&amp;amp;quot; &amp;amp;lt;&amp;amp;gt; %&amp;amp;amp;\\]$*&amp;amp;quot;不行列

问题描述 '<>"%&如何判断text输入不否包含这几个字符的正则表达式好像ValidationExpression="^['"<>%&\]$*"不行列 解决方案 解决方案二:^[^'"<>%&\]*$解决方案三:^[^'"<>%&\]*$中的"怎么办"^[^'"<>%&\]*$"这样会冲突解决方案四:你的另

正则表达式替换width=&amp;amp;quot;*&amp;amp;quot;

问题描述 <embedsrc="http://player.56.com/v_NjQyNDc1OTQ.swf"type="application/x-shockwave-flash"width="480"height="405"allowNetworking="all"allowScriptAccess="always"></embed>想把这里的width=&q

php正则匹配html标签的程序代码

正则表达式 <(\S*?) [^>]*>.*?</\1>|<.*? /> 匹配 <html>hello</html>|<a>abcd</a> 不匹配 abc|123|<html>ddd   正则表达式 ^[^<>`~!/@\#}$%:;)(_^{&*=|'+]+$ 匹配 This is a test 不匹配 <href = | <br> | That's it   正

正确使用带有&amp;quot;g&amp;quot;标记的javascript正则表达式_正则表达式

下面我们要谈谈带有"g" 标记的正则表达式的使用问题,首先让我们看一段代码,从例子入手更容易理解. 复制代码 代码如下: 1 function a(val) 2 { 3 var re = /^\d+$/g; 4 alert(re.lastIndex); 5 return re.test(val); 6 } 7 alert(a(5)); 8 alert(a(6)); 运行上述代码,在不同浏览器中会得到不同结果,IE中:0 true 0 true,FF和Chrome中:0 true 1 f

求助多个端口号用&amp;amp;quot;;&amp;amp;quot;隔开的正则表达式该怎么写

问题描述 求助多个端口号用";"隔开的正则表达式该怎么写 端口号范围从0-65535之间,如果多个端口号用分号隔开.哪位大神写过类似的还请指点一下谢谢 解决方案 ^d{1,5}(;d{1,5})*$ 测试地址:http://tool.oschina.net/regex/ 解决方案二: 端口号正则表达式 解决方案三: d{1,5}(;d{1,5})?$ 解决方案四: 解决方案五: 你有测试吗??????????????????

这个正则表达式&amp;amp;quot;\\{(.*?)\\}&amp;amp;quot;想匹配什么?

问题描述 这个正则表达式"\{(.*?)\}"想匹配什么? 解决方案 解决方案二:{sjadhejkdh}{237846jsehdf}{22}这些字符串解决方案三:嗯,括号和问号,貌似都是多余的呢,去掉也一样>.....解决方案四:\{和\}是转译{}解决方案五:括号是分组用的问号是非贪婪匹配具体可以百度解决方案六:引用2楼hanvslin的回复: 嗯,括号和问号,貌似都是多余的呢,去掉也一样>..... \{和\}是转译{}不是多余的啊解决方案七:Stringstr=&q

正则表达式的&amp;amp;quot;+&amp;amp;quot;怎么用呢- -

问题描述 马上就要实习了,因为开发环境是linux,所以今天恶补了一下正则表达式.但是在自己玩的时候杯具了,比如说我的sample里面含有三行,分别是"aababc",输入以下命令grep"w*"sample输出aababc这个没问题,但是我输入grep"w+"sample就杯具了,完全没输出,这是为什么呢,看了一天书,晚上一个很简单的问题,有人能帮得上我么,晕乎乎--