java正则表达式添加尾部斜杠
我正在尝试重定向URL以添加尾部斜杠java正则表达式添加尾部斜杠,java,regex,magnolia,Java,Regex,Magnolia,我正在尝试重定向URL以添加尾部斜杠 /news -> /news/ /news?param1=value1 -> /news/?param1=value /news#anchor?param1=value1 -> /news/#anchor?param1=value1 我需要通过一个只标识路径和add/的正则表达式来完成。如果没有参数,就没有问题 ^(/[a-z0–9/\-]*[^/])$->$1/ 但是当存在参数时,我无法创建将路径与参数分离的正则表达式 有什么想法吗?谢
/news -> /news/
/news?param1=value1 -> /news/?param1=value
/news#anchor?param1=value1 -> /news/#anchor?param1=value1
我需要通过一个只标识路径和add/的正则表达式来完成。如果没有参数,就没有问题
^(/[a-z0–9/\-]*[^/])$->$1/
但是当存在参数时,我无法创建将路径与参数分离的正则表达式
有什么想法吗?谢谢您不应该将字符串结尾与
$
匹配,也不需要在结尾处添加[^/]
^(/[a-z0–9/_\-]*)
const regex=new RegExp(“^(/[a-z0-9/\-]*)”;
console.log(“/news.replace”(regex,“$1/”);
log(“/news?param1=value1.replace(regex,“$1/”));
console.log(“/news#anchor?param1=value1.replace(regex,“$1/”)代码>您不应该将字符串的结尾与$
匹配,也不需要在结尾处使用[^/]
^(/[a-z0–9/_\-]*)
const regex=new RegExp(“^(/[a-z0-9/\-]*)”;
console.log(“/news.replace”(regex,“$1/”);
log(“/news?param1=value1.replace(regex,“$1/”));
console.log(“/news#anchor?param1=value1.replace(regex,“$1/”)
您尝试的模式只匹配/news
,因为锚点$
断言字符串的结尾
如果省略锚定符,它还将与?
和#
匹配,因为您使用的[^/]
匹配除正斜杠以外的任何字符
^(?:/[a-z0-9_-]+)+
您可以重复1次或多次匹配正斜杠,后跟字符类中列出的任何字符1次或多次,以防止匹配//
在替换中,使用完全匹配并添加正斜杠
^(?:/[a-z0-9_-]+)+
|
输出
/news/
/news/?param1=value1
/news/#anchor?param1=value1
注意在正则表达式中,这部分0–9
中的连字符是
您尝试的模式只匹配/news
,而不是,因为锚点$
断言字符串的结尾
如果省略锚定符,它还将与?
和#
匹配,因为您使用的[^/]
匹配除正斜杠以外的任何字符
^(?:/[a-z0-9_-]+)+
您可以重复1次或多次匹配正斜杠,后跟字符类中列出的任何字符1次或多次,以防止匹配//
在替换中,使用完全匹配并添加正斜杠
^(?:/[a-z0-9_-]+)+
|
输出
/news/
/news/?param1=value1
/news/#anchor?param1=value1
注意在正则表达式中,这部分0–9
中的连字符是
而不是可能只需要将字符串的结尾扩展到参数之外。
包含参数和不包含参数可能是:
^(/[a-z0-9/-]*(?->$1/$2
请参见可能只需要将字符串的结尾扩展到参数之外。
包含参数和不包含参数可能是:
^(/[a-z0-9/-]*(?->$1/$2
请参见您可以按如下方式进行操作:
public class Main {
public static void main(final String[] args) {
String[] arr = { "/news", "/news?param1=value1", "/news#anchor?param1=value1" };
for (String s : arr) {
System.out.println(s.replaceFirst("([^\\/\\p{Punct}]+)", "$1/"));
}
}
}
输出:
/news/
/news/?param1=value1
/news/#anchor?param1=value1
正则表达式的解释:
/news/
/news/?param1=value1
/news/#anchor?param1=value1
(
:开始捕获组#1
[
:开始
^
:没有
\/
:一个/
字符
\p{Punct}
:A
]
:字符类结束
+
:
)
:捕获组结束#1
您可以按如下方式执行:
public class Main {
public static void main(final String[] args) {
String[] arr = { "/news", "/news?param1=value1", "/news#anchor?param1=value1" };
for (String s : arr) {
System.out.println(s.replaceFirst("([^\\/\\p{Punct}]+)", "$1/"));
}
}
}
输出:
/news/
/news/?param1=value1
/news/#anchor?param1=value1
正则表达式的解释:
/news/
/news/?param1=value1
/news/#anchor?param1=value1
(
:开始捕获组#1
[
:开始
^
:没有
\/
:一个/
字符
\p{Punct}
:A
]
:字符类结束
+
:
)
:捕获组结束#1
您可以使用非常简单的正则表达式,如下所示:
^([/\w]+)
使用此替换字符串:$1/
您可以使用非常简单的正则表达式,如下所示:
^([/\w]+)
使用此替换字符串:$1/
正则表达式中的$
匹配输入的结尾(或多行模式下的一行),因此它不会将任何url与路径参数匹配。正则表达式中的$
匹配输入的结尾(或多行模式下的一行),所以它不会将任何url与路径参数匹配。它工作得非常好,我只添加了它也接受大写字母。非常感谢,我已经为这个问题发疯了。它工作得非常好,我只添加了它也接受大写字母。非常感谢,我已经为这个问题发疯了.