java - 这个正则表达式有什么问题?

标签 java android regex

我需要在 Android 应用程序中匹配 Twitter-Hashtags,但我的代码似乎没有执行预期的操作。 我想到的是:

ArrayList<String> tags = new ArrayList<String>(0);
Pattern p = Pattern.compile("\b#[a-z]+", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(tweet); // tweet contains the tweet as a String
while(m.find()){
    tags.add(m.group());
}

变量 tweet 包含包含主题标签的常规推文 - 但 find() 不会触发。所以我猜我的正则表达式是错误的。

最佳答案

您的正则表达式因 \b 字边界 anchor 而失败。此 anchor 仅匹配非单词字符和单词字符(字母数字字符)。因此,将它直接放在 # 前面会导致正则表达式失败,除非在 # 之前有字母数字字符 !您的正则表达式会匹配 foobarfoo#hashtag blahblahblah 中的主题标签,但不会匹配 foobarfoo #hashtag blahblahblah 中的主题标签。

改用#\w+,记住,在字符串中,你需要双反斜杠:

Pattern p = Pattern.compile("#\\w+");

关于java - 这个正则表达式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844426/

相关文章:

javascript - 尝试使用 Replace 将背景位置部分替换为正则表达式来解析 URL

javascript - 如何编写 Regex 来替换一些单词并在 JavaScript 中缺少时添加 ""。意外行为

java - 对 pig 中每 n 个行值求和

android - IntelliJ 新的 android gradle 插件 (0.14.+)

java - Android 库与本地 Maven 存储库一起使用

android - phonegap android 中的数据库未定义错误?

java - 正则表达式 java 中的模式

java - 将整数数组写入文件

java - 如何使用相对路径查找包外的图像

java - 从 Servlet 下载带有附加数据的 PDF 文件