2

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

对于字符串: 工作字符串 它工作正常。但是当我尝试使用以下模式时: 非工作模式

对于字符串:str =

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

PS:对图像描述感到抱歉-如果它输入,我无法代表该字符。当我复制粘贴该字符时,它变成了一个空白空间。

4

1 回答 1

2

奇怪的符号 (└) 看起来像 ASCII 3 在某些字体中的表示方式。

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

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

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

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

我曾经\\x03\\d匹配代码。最后一部分(?= )是前瞻。它检查是否匹配,但不使用它。就是这样,因此您连续进行多个匹配。


一个更简单的替代方法是将字符串拆分为“└”,然后检查各个部分。

s.split("\u0003")
于 2011-12-28T12:14:08.510 回答