java - 删除模式规则中的空格

标签 java pattern-matching

我有以下模式规则:

static List<String> fetchUrls( String tweet ) {
     List<String> url = new ArrayList<String>();
     Pattern p = Pattern.compile( "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)" + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)");
     Matcher matcher = p.matcher( tweet );

     while ( matcher.find() ) {
         url.add( matcher.group() ); // When an URL is detected, we add it to the Array List
     }

     return url;
}

但是,当我打印 ArrayList 的字符串表示形式时,第一个 url 之前有一个空格。我怎样才能摆脱这个空白?

最佳答案

您可以将 (?:^|[\W]) 替换为 \b,因为您要将字符串的开头或非单词字符与该交替组匹配。

由于下一个子模式是 h,因此它之前的 \b 与字符串开头的位置或非单词字符完全匹配。

如果您想继续使用您的模式,它将看起来像

Pattern p = Pattern.compile( "\\b((ht|f)tp(s?):\\/\\/|www\\.)" + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)");
                              ^^^

现在,matcher.group() 应该收集不带前导非单词字符的 URL。

您可以删除不必要的转义反斜杠和组,例如

"\\b(?:(?:ht|f)tps?://|www\\.)" + 
"(?:(?:[\\w-]+\\.)+?(?:[\\w.~-]+/?)*" + 
"[\\p{Alnum}.,%_=?&#+()\\[\\]*$~@!:/{};'-]*)"

关于java - 删除模式规则中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41104336/

相关文章:

java - 多个模式对话框,无法选择最上面的一个

java - 使用 Java 8 获取属性的最大值

rust - 在匹配语句中重用匹配变量

正则表达式匹配最长的重复子串

graph - 在图中查找子图

f# - FSharp 参数模式匹配。为什么声明分配自而不是分配给?

java - 在方法的本地范围内创建的 ReentrantLock 对象将如何工作?

java - 如何填充格式化字符串

java - 如何在没有_class属性的情况下将spring数据与couchbase一起使用

pattern-matching - jmeter中的管道符号模式匹配