【发布时间】:2017-08-29 08:33:12
【问题描述】:
我需要在 perl 中找到一个与给定正则表达式不匹配的字符串。例如:如果字符串是:
%3C9ba91570d204095439e82b74ab4d74b0%3E%3Cma%3E%3C5975%3E
我需要获取 'ma',它是 '%3C' 和 '%3E' 子字符串中的一个字符串。所以这两个子字符串中的任何字符串都应该匹配。我的意思是,如果 'ma' 不存在,它可能是任何其他字符串 ('am'),如本例所示:
%3C9ba91570d204095439e82b74ab4d74b0%3E%3Cam%3E%3C5975%3E
将在 apache 的 RewriteRule 中使用,以便将获取的值存储在环境变量中。
我试过这个,但它没有达到我想要的效果:
RewriteEngine on
RewriteCond %{HTTP_COOKIE} (%3C.*?%3E%3C.*?)(.*)
RewriteRule ^.*$ - [E=FetchedValue:%2]
任何解决这个问题的帮助都会很棒......!
【问题讨论】:
-
如果您尝试:
RewriteCond %{HTTP_COOKIE} %3C(.*?)%3E和RewriteRule ^.*$ - [E=FetchedValue:%1]? -
不,它给出 9ba91570d204095439e82b74ab4d74b0,但我需要 'ma' 子字符串。
-
RewriteCond %{HTTP_COOKIE} (ma|am)%3C(.*?)%3E和RewriteRule ^.*$ - [E=FetchedValue:%2]怎么样 -
不,这种类型的正则表达式不起作用,因为 (ma|am) 是未知的。它也可能是任何其他字符串。我需要匹配 '%3C' 和 '%3E' 中的任何字符串,并且在第二次出现时也是如此。
-
RewriteCond %{HTTP_COOKIE} %3C.*?%3E%3C(.*?)%3E和RewriteRule ^.*$ - [E=FetchedValue:%1]
标签: regex apache perl mod-rewrite