正则表达式模式匹配不适用于java中的特定字符串

时间:2011-12-28 11:30:08

标签: java regex encoding rxtx

我在java中使用了REGEX模式(如下所示): Working Pattern

表示字符串: working string 它工作正常。但是当我尝试使用以下模式时: non working pattern

表示字符串:str =

nonworking string 抱歉,图片上传。看起来a00 []中的字符'[]'在浏览器上的编码方式不同。有什么方法以不同的方式阅读该角色?相同的字符在记事本++中有不同的表示。我正在使用RXTX和inputStream.read(readBuffer)来读取数据。有没有什么办法可以在java中更新我的编码方法来克服这个问题? http://i.imgur.com/sdUjS.jpg i.imgur.com

P.S:对图像描述感到抱歉 - 如果输入图像,我就无法表示该字符。       当我复制粘贴该字符时,它变成一个空白区域。

1 个答案:

答案 0 :(得分:2)

奇怪的符号(└)看起来像是用某些字体表示ASCII 3。

在Regex中,\b匹配单词边界。也就是说,在字母数字和非字母数字字符之间。它适用于第一种情况,因为在匹配的子字符串之前有一个数字(“9”),在它之后有一个感叹号(“!”)(它是一个非字母数字字符)。

在第二种情况下,您将感叹号更改为字母,因此不再有从字母数字到非字母数字的转换。

解决方案是扩展正则表达式,使其也匹配符号和数字:

Pattern.compile("(\\x03\\d)(a)\\w*(?=\\x03\\d)");

我使用\\x03\\d来匹配代码。最后一部分(?= )是前瞻性的。它检查它是否匹配,但不消耗它。就是这样,所以你连续做多个匹配。


一个更简单的选择,就是将字符串拆分为“└”,然后检查这些部分。

s.split("\u0003")