2017-04-04 74 views
1

我需要找到一個字符串,不匹配perl中給定的正則表達式。例如:如果字符串是:Perl的正則表達式來找到一個不匹配的字符串

%3C9ba91570d204095439e82b74ab4d74b0%3E%3Cma%3E%3C5975%3E 

我要取「馬」,即「%3C」和「%3E」子字符串中的字符串。所以這兩個子字符串中的任何字符串都應該匹配。我的意思是,如果「馬」是不存在的,它可以是任何其他字符串(「AM」)就像這個例子:

%3C9ba91570d204095439e82b74ab4d74b0%3E%3Cam%3E%3C5975%3E 

它是在Apache的重寫規則使用,使這種獲取值存儲在一個環境變量中。

我想這一點,但它並沒有給我的願望:

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} (%3C.*?%3E%3C.*?)(.*) 
RewriteRule ^.*$ - [E=FetchedValue:%2] 

任何幫助解決這將是偉大的......!

+0

如果您嘗試:'RewriteCond%{HTTP_COOKIE}%3C(。*?)%3E'和'RewriteRule ^。* $ - [E = FetchedValue:%1]''? – npinti

+0

不,它給出了9ba91570d204095439e82b74ab4d74b0,但我需要'ma'子串。 –

+0

'RewriteCond%{HTTP_COOKIE}(ma | am)%3C(。*?)%3E'和'RewriteRule ^。* $ - [E = FetchedValue:%2]' – kaldoran

回答

2

如果你真的相信它永遠是%3C和%3E的第二個字符串有多種可能性,如:

RewriteEngine on RewriteCond %{HTTP_COOKIE} %3C.*?%3E.*?%3C(.*?)%3E RewriteRule ^.*$ - [E=FetchedValue:%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 

所以,這產生了兩個問題:

  1. 這是一個有效的cookie值
  2. 如何區分ma matc h和另外兩個?