regex - 如何替换正则表达式中的特定字符?

标签 regex apache .htaccess mod-rewrite url-rewriting

我想在给定文本上查找 / 符号并替换为 * 符号。

http://localhost:7070/home/test/mobile:device.testdevice.id1_123.id2_456.id3_ab-c.CONSTANT_formula:map/TreeMap.json

这里的CONSTANT是固定的,不会改变,但是CONSTANT后面可以有任何字符。我想在 url 中找到 CONSTANT 并查找 / 符号并将其替换为 * 符号。

类似这样的 - http://localhost:7070/home/test/mobile:device.testdevice.id1_123.id2_456.id3_ab-c.CONSTANT_formula:map*TreeMap.json

我正在尝试使用下面的正则表达式,但当我使用一个或多个标识符时,它会匹配 CONSTANT 之后的所有内容

^CONSTANT(.+)

有没有办法找到/符号并用*符号替换?

最佳答案

使用 mod_rewrite 规则,您可以在关键字 CONSTANT 之后将 / 替换为 *:

RewriteCond %{REQUEST_URI} ^(/.*CONSTANT[^/]*)/(.*) [NC]
RewriteRule ^ %1*%2 [L,NE,R]

请注意,替换 URL 后它将执行外部重定向。

我们在 RewriteCond 中使用 2 个捕获组:

  1. ^(/.*CONSTANT[^/]*) 匹配 CONSTANT 之前的所有内容,后跟 0 个或多个非 /
  2. 然后我们匹配/
  3. (.*):最后我们匹配第二个捕获组中的所有其他内容

关于regex - 如何替换正则表达式中的特定字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73412940/

相关文章:

python - 正则表达式不匹配

python - python-ldap 初始化时 httpd 上的段错误 (11)

apache - 重写规则不适用

html - 如何在错误 404 页面短暂延迟后自动重定向?

.htaccess - 使用 htaccess 从基本 URL 中删除变量

python - 正则表达式:在数字后跟字母时添加空格

Java匹配字符串中的整个单词

apache - Wildfly、Tomcat、Apache 和子域

php - htaccess 重写,如果 url 扩展名是 .php 删除它

c++ - 在 C++ 中使用正则表达式标记字符串并保留定界符