Java 正则表达式检查包含网址的字符串

标签 java regex

我有字符串模式,如下所示:

String wwwPattern = "^(.*[a-zA-Z]+\\.[a-zA-Z]+\\.[a-zA-Z]+.*)$";

当我尝试将此模式与字符串匹配时,我观察到如下内容:

String string1 = "www.stackoverflow.com";
System.out.println(string1.matches(wwwPattern)); // print true, this is OK

String string2 = "test www.stackoverflow.com test";
System.out.println(string2.matches(wwwPattern)); // print true, this is OK

String string3 = "test \r\n www.stackoverflow.com test";
System.out.println(string3.matches(wwwPattern)); //print false

有谁知道为什么会这样吗?

最佳答案

使用 Pattern.DOTALL 标志将换行符与 . 匹配。

要内联使用它而不是作为 int 标志,请使用 (?s)

示例

String pattern = "(?s)^(.*[a-zA-Z]+\\.[a-zA-Z]+\\.[a-zA-Z]+.*)$";
String input = "test \r\n www.stackoverflow.com test";
System.out.println(input.matches(pattern));

输出

true

此外,我会将外括号移到 .* 之后(第一个和最后一个),这样您就可以匹配第 1 组中的内容。

类似于:“(?s)^.*([a-zA-Z]+\\.[a-zA-Z]+\\.[a-zA-Z]+)。 *$"

最后,看看fge的评论(+1)。

关于Java 正则表达式检查包含网址的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375917/

相关文章:

python - 用于额外字段的正则表达式

java - 为什么 SocketChannel 是抽象的?

java - Intellij IDEA Java 类不会在保存时自动编译

java - 是否可以通过 GSON 将 ImageView 发送到另一个 Activity?

regex - .htaccess 使用代理从子目录重定向到另一个域

javascript - 一个简单的正则表达式的奇怪结果

java - 尝试使用数据库中的数据填充自定义 ListView 时出现 IndexOutofBoundsException 错误

java - Spring-ws 或 Axis2 或其他用于 WS 的 "Contract-First"方法

java - 尝试为字母数字字符串编写正则表达式,例如 - R51/53

c# - 从字符串中获取总数 'objects'