我需要找到一个与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]
任何帮助解决这个问题都会很棒......!
答案 0 :(得分:2)
如果您确定它始终是%3C和%3E之间的第二个字符串,则有多种可能性:
RewriteEngine on
RewriteCond %{HTTP_COOKIE} %3C.*?%3E.*?%3C(.*?)%3E
RewriteRule ^.*$ - [E=FetchedValue:%1]
答案 1 :(得分:1)
我认为你的正则表达式很好。另一方面,您有输入/规格问题。根据您的正则表达式考虑以下grep
命令:
echo '%3C9ba91570d204095439e82b74ab4d74b0%3E%3Cma%3E%3C5975%3E' | grep -Po '%3C.*?%3E'
grep -P
启用perl语法。我跳过了跟踪.*
部分,否则它与您的正则表达式相同。grep -o
仅保留匹配所以,我们得到了三场比赛,第二场比赛是你想要的:
$ echo '%3C9ba91570d204095439e82b74ab4d74b0%3E%3Cma%3E%3C5975%3E' | grep -Po '%3C.*?%3E'
%3C9ba91570d204095439e82b74ab4d74b0%3E
%3Cma%3E
%3C5975%3E
因此,这提出了两个问题:
ma
匹配与其他两个匹配?