【问题标题】:PCRE based Regex for redirection基于 PCRE 的正则表达式用于重定向
【发布时间】:2019-01-16 11:07:10
【问题描述】:

我有一些链接如下。

http://www.example.com/excel.aspx
http://www.example.com:80/word.aspx
http://www.example.com:80/powerpoint.aspx
http://www.example.com:80/pdf.aspx
http://www.example.com:80/barcode.aspx
http://www.example.com/ocr.aspx
http://www.example.com/email.aspx
http://www.example.com/project.aspx

& 我想在单个正则表达式模式或单个正则表达式行中重写 URL,如下所示。

https://www.example.com/excel
https://www.example.com/word
https://www.example.com/powerpoint
https://www.example.com/pdf
https://www.example.com/barcode
https://www.example.com/ocr
https://www.example.com/outlook
https://www.example.com/project

如果您检查和比较,我已将电子邮件替换为替换 URL 中的 Outlook。

我可以匹配以下模式 .*/(\w+).aspx 并替换为 https://www.example.com/$1 但我找不到替换 的方法带有 outlook 的电子邮件。演示https://regex101.com/r/71huIx/24

类似于http://www.rexegg.com/regex-trick-conditional-replacement.html 但没有池或字典。但是,如果池或字典可以是正则表达式本身的一部分,那么它就可以了。原因是,我有带有规则的 txt 文件,其中 line1 是正则表达式,而 line2 是替换。

任何想法我该怎么做?

【问题讨论】:

  • 也许用两个正则表达式而不是一个?首先规范化并剥离.aspx,其次,将电子邮件重定向到outlook。这让事情变得容易多了。
  • @Corion,谢谢你的建议。是的,这是一种解决方案,但是最好在单个正则表达式中完成。原因是,这个示例包含一个区别,电子邮件/前景。实际上,存在很多差异,因此每个差异都会有 2 个正则表达式。

标签: regex replace conditional pcre


【解决方案1】:

这是一个应该可以工作的 Apache httpd 配置:

RewriteEngine On
RewriteRule   ^/outlook$        https://example.com/email.aspx  [P,L]
RewriteRule   ^/([^./])/?$      https://example.com/$1.aspx     [P,L]

当给定“outlook”和“foobar”时,它使用反向代理来提供像email.aspxfoobar.aspx 这样的页面,而不向用户透露它们的扩展。

虽然看起来你出于某种原因试图倒退。在这种情况下,您需要:

RewriteEngine On
RewriteRule   ^/email\.aspx$    https://example.com/outlook     [L]
RewriteRule   ^/([^.]+)\.aspx$  https://example.com/$1          [L]

 

Regex conditional expressions 无法执行您的任务。正则表达式条件的结构是:

(?(condition)yes-pattern|no-pattern)
  • condition
    • 零宽度断言(通常是前瞻)
    • 带括号的整数,表示该编号的捕获是否有内容
    • 尖括号或单引号中的捕获组名称
    • (R) 在递归或 eval 中计算时为真
  • yes-pattern 是匹配条件为真的正则表达式
  • no-pattern 是一个可选的正则表达式来匹配条件为假

因此,您不能使用条件将新文本推入匹配项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2015-01-30
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多