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

标签 java regex encoding rxtx

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

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

对于字符串:str =

nonworking string 抱歉上传图片。看起来 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/

相关文章:

java - pymemcached 缓存中的下一个唯一键

java - 如何以编程方式更新 Alfresco 中的链接?

java - JGit 在同一分支上 checkout

java - Tomcat 无法找到请求的资源,尽管它存在

python - 如何使用replace_with避免在BeautifulSoup中打印utf-8字符

java - 为什么我从正则表达式匹配器中得到这些结果?

regex - 使用 Mongoose 从 mongoDB 中进行选择,其中 ObjectId 不等于特定 ID

regex - 如何从模块中导出正则表达式

.net - 从 Sybase 获取数据时,阿拉伯字符在 .Net 中显示为垃圾

encoding - 算出文件编码 : I know the string, 知道这个字符,编码是什么?