我在 java 中使用 REGEX 模式(如下所示):
对于字符串: 它工作正常。但是当我尝试使用以下模式时:
对于字符串:str =
抱歉上传图片。看起来 a00[] 中的字符 '[]' 在浏览器上的编码不同。有什么方法可以以不同的方式阅读该字符?相同的字符在 Notepad++ 中有不同的表示。我正在使用 RXTX 和 inputStream.read(readBuffer) 来读取数据。有什么办法可以更新我在 java 中的编码方法来克服这个问题吗? http://i.imgur.com/sdUjS.jpg i.imgur.com
P.S:抱歉图片描述 - 如果它打出来我不能代表那个角色。 当我复制粘贴那个字符时,它变成了一个空白区域。
最佳答案
奇怪的符号 (└) 看起来像 ASCII 3 在某些字体中的表示方式。
在正则表达式中,\b
匹配单词边界。也就是说,介于字母数字字符和非字母数字字符之间。它适用于第一种情况,因为在匹配的子字符串之前有一个数字 ("9"),紧接着是一个感叹号 ("!")(这是一个非字母数字字符)。
在第二种情况下,您将感叹号更改为字母,因此不再有从字母数字到非字母数字的转换。
解决方案是扩展正则表达式,使其也匹配符号和数字:
Pattern.compile("(\\x03\\d)(a)\\w*(?=\\x03\\d)");
我使用 \\x03\\d
来匹配代码。最后一部分 (?= )
是前瞻性的。它检查它是否匹配,但不使用它。是这样的,所以你连续进行了多次匹配。
一个更简单的替代方案,就是将字符串拆分为“└”,然后检查各个部分。
s.split("\u0003")
关于java - 正则表达式模式匹配不适用于 java 中的特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655337/