2017-03-17 31 views
2

什麼是Java中正確的正則表達式,用於獲取任何PHP的內容header() WITHIN <? ?><?php ?>標籤,而不是註釋?我一直在拉我的頭髮。我一直在討論正則表達式手冊,但無論我嘗試什麼都行不通。在PHP中匹配任何PHP header()標頭用於標頭

http://regexr.com/3fi39

(.*)header\s+\((\"|\').*?(\"|\')\)\;?(.*)

這是我一直在測試我的表情。我甚至沒有添加PHP標籤,因爲我無法使基礎表達式工作。我對延緩這一功能的第3天......

闖闖(感謝chris85),它的工作原理

(.*)header\s*\(("|')(.*)("|')\)\;(.*)

+0

你想要一個文件的所有文本?問題不明確... – programmingandroid

+0

基本上我正在掃描一個緩衝區的標題標記,並且我想提取這個標題以重新發送Java響應。所以我試圖用Matcher來提取頭來重新使用。 – JordanSasquatchMan

+0

謝謝!我能夠得到一場比賽......但比我需要的多。我怎樣才能得到標題的內容? – JordanSasquatchMan

回答

1

你的第一個正則表達式眼福,因爲+量詞需要的比賽,該*發生零次或多次。所以\s+至少需要1個空格,但header(沒有空格。您可以使用以下正則表達式來提取PHP頭調用的內容:

header\(('|")([^\1]+?)\1\) 

('|")是一個單引號或雙引號。與(["'])相同。 [^是否定字符,意味着所有列在裏面的字符都是不允許的。 \1是我們匹配的第一個字符(這是一個封裝報價)的反向引用。 +繼續前進,直到遇到預期的收盤報價,然後是)

下面是一個regex101演示以及incase的一部分我的描述不清楚,https://regex101.com/r/D9rXDT/2/

+0

非常感謝您的幫助。我有最後一個小問題。我如何在表達式之前否定'#'和'//'以嘗試並且不捕獲註釋掉的代碼? – JordanSasquatchMan

+0

不知道如果Java支持它,但負面後臺會做到這一點。 '(?<!\/\/|##)header \(('|「)([^ \ 1] +?)\ 1 \)',也可以用'?'使https非貪心。 ://regex101.com/r/D9rXDT/3/ – chris85

+0

是的,它似乎有問題,它也有問題轉義模式'header \\((['| \「])([^ \ 1] +)\ 1 \\)'是我如何逃避它,所以它沒有抱怨使用錯誤的轉義字符,但它不匹配任何標題。我確實使用了'header \\((['| \「])([^ \\ 1] +)\\ 1 \\)',它在Eclipse中沒有錯誤,但在運行時拋出了一個關於java.util的錯誤。 regex.PatternSyntaxException:索引19附近的非法/不受支持的轉義序列012 \header \((['|「])([^ \ 1] +)\ 1 \)''這是'[^ \ 1]'中的轉義' – JordanSasquatchMan