JavaScript和Java之间正则表达式模式的差异?
在JavaScript中,我有以下内容:JavaScript和Java之间正则表达式模式的差异?,java,javascript,regex,Java,Javascript,Regex,在JavaScript中,我有以下内容: function replaceURLWithHTMLLinks(text) { var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; return text.replace(exp,"<a href='$1'>$1</a>"); } 函数replaceurlwithhtm
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
函数replaceurlwithhtmlinks(文本){
var exp=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig;
返回文本。替换(exp,“”);
}
它将输入字符串中的所有URL替换为URL的一个版本,该版本周围有一个锚定标记,以将其转换为链接。我试图用以下函数在Java中复制此功能:
private String replaceURLWithHTMLLinks(String text) {
String pattern = "/(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/i";
return text.replaceAll(pattern, "<a href=\"$1\">$1</a>");
}
private String replaceurlwithhtmlinks(字符串文本){
字符串模式=“/(\\b(https?| ftp |文件):\\/\/[-A-Z0-9+&@#\/%?=~!:,.;]*[-A-Z0-9+&@#\/%=~)/i”;
返回text.replaceAll(模式“”);
}
然而,尽管它在JavaScript中工作良好,但在Java中找不到任何匹配项,即使是对于相同的输入字符串。我是否需要更改模式中的某些内容,或者正在发生什么?对于Java示例,您需要去掉表达式周围的斜线和结尾处的
I
。您可以单独指定i
标志。因此,JavaScript的/blarg/i
将变成“(?i)blarg”
您的代码将类似于:
private String replaceURLWithHTMLLinks(String text) {
String pattern = "(?i)(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])";
return text.replaceAll(pattern, "<a href=\"$1\">$1</a>");
}
private String replaceurlwithhtmlinks(字符串文本){
String pattern=“(?i)(\\b(https?| ftp | file):\\/\/[-A-Z0-9+&@#\/%?=~!:,;]*[-A-Z0-9+&@#\/%=~)”;
返回text.replaceAll(模式“”);
}
这很正常:Java的模式
不是这样工作的
您的正则表达式与这两个引擎都兼容,但是在Java中不以这种方式指定修饰符
做:
Pattern-Pattern=Pattern.compile(\\b(https?| ftp |文件):\\/\/[-A-Z0-9+&@\\/%?=~\\!:,.;]*[-A-Z0-9+&\/%=~\\\]”,Pattern,不区分大小写);
retrun pattern.matcher(text.replaceAll)(“”);
很抱歉出现offtopic,但使用正则表达式解析HTML标记是不安全的,而且是emm。。丑陋的。
Pattern pattern = Pattern.compile("\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])", Pattern.CASE_INSENSITIVE);
retrun pattern.matcher(text).replaceAll("<a href=\"$1\">$1</a>");