2017-03-17 52 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