有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中使用这个PHP正则表达式从字符串中检索哈希标记?

我是一名PHP开发人员,从我开始学习Java到现在只有几个月了。在这里,我在PHP中有一个从字符串中检索哈希标记的函数

{
    preg_match_all('/(^|[^a-z0-9_])#([a-z0-9_]+)/i', $text, $matchedHashtags);
    $hashtag = '';
    if (!empty($matchedHashtags[0])) {
        foreach ($matchedHashtags[0] as $match) {
            $hashtag .= preg_replace("/[^a-z0-9]+/i", "", $match) . ',';
        }
    }
    return rtrim($hashtag, ',');
}

此函数返回一个新字符串,其中包含用逗号分隔的hashtags。我的问题是,如何在java中实现这个确切的功能?问候


共 (1) 个答案

  1. # 1 楼答案

    一种选择可能是使用单一模式,而不是先匹配然后替换

    然后,您可以将结果连接到字符串中,或者将结果添加到列表中,并使用带有逗号的String.join

    \B#\w*[A-Za-z]\w*
    
    • \B\b不匹配的位置进行匹配
    • #\w*[A-Za-z]\w*匹配#和至少一个字符a-Za-z(如果您不想根据注释只匹配数字或下划线)

    Java demoRegex demo

    比如说

    List<String> matches = new ArrayList<String>();
    Matcher m = Pattern.compile("\\B#\\w*[A-Za-z]\\w*")
        .matcher("#test @#$#test a#test,#2021, #__");
    while (m.find()) {
        matches.add(m.group());
    }
    
    System.out.println(String.join(",", matches));
    

    输出

    #test1,#test2