【发布时间】:2011-07-16 11:33:18
【问题描述】:
如何在 Java 中处理 PHP 正则表达式:
if(preg_match("/\r\n(.*?)\$/",$req,$match)){ $data=$match[1]; }
顺便说一句,这一行是以下函数的一部分:
function getheaders($req){
$r=$h=$o=null;
if(preg_match("/GET (.*) HTTP/" ,$req,$match)){ $r=$match[1]; }
if(preg_match("/Host: (.*)\r\n/" ,$req,$match)){ $h=$match[1]; }
if(preg_match("/Origin: (.*)\r\n/",$req,$match)){ $o=$match[1]; }
if(preg_match("/Sec-WebSocket-Key2: (.*)\r\n/",$req,$match)){ $key2=$match[1]; }
if(preg_match("/Sec-WebSocket-Key1: (.*)\r\n/",$req,$match)){ $key1=$match[1]; }
if(preg_match("/\r\n(.*?)\$/",$req,$match)){ $data=$match[1]; }
return array($r,$h,$o,$key1,$key2,$data);
}
提前致谢!
到目前为止我有:
Matcher matcher = Pattern.compile("\r\n(.*?)\\$").matcher(req);
while(matcher.find()){
data = matcher.group(1);
}
但是,我确信这是错误的。
好的,谢谢您的回答,但他们还没有提供帮助。但是,请您告诉我这个正则表达式的含义:
if(preg_match("/\r\n(.*?)\$/",$req,$match)){ $data=$match[1]; }
我知道,如果它确实在字符串$req 中找到与/\r\n(.*?)\$/ 的匹配项,它会将不同种类的数学保存到数组$match 中。但是:这里匹配的是什么? $match[0] 和 $match[1] 有什么区别?也许,如果我理解了这一点,我将能够重构在 Java 中产生相同结果的方式。
谢谢雅罗斯拉夫,但是:
我正在尝试处理的字符串(Google Chrome 发送给我的握手的最后一行是:
Cookie: 34ad04df964553fb6017b93d35dccd5f=%7C34%7C36%7C37%7C40%7C41%7C42%7C43%7C44%7C45%7C46%7C47%7C48%7C49%7C50%7C52%7C53%7C54%7C55%7C56%7C57%7C58%7C59%7C60%7C61%7C62%7C63%7C64%7C65%7C66%7C67%7C68%7C69%7C70%7C71%7C72%7C73%7C74%7C75%7C76%7C77%7C78%7C79%7C80%7C81%7C82%7C83%7C84%7C85%7C86%7C87%7C88%7C89%7C90%7C91%7C92%7C93%7C94%7C95%7C96%7C97%7C98%7C99%7C100%7C101%7C102%7C103%7C104%7C105%7C106%7C107%7C108%7C109%7C110%7C111%7C112%7C113%7C114%7C115%7C116%7C117%7C118%7C119%7C120%7C121%7C122%7C123%7C124%7C125%7C126%7C127%7C128%7C129%7C130%7C131%7C132%7C133%7C134%7C135%7C136%7C137%7C138%7C139%7C%3B%7C%3B%7C%3B%7C%3B1%3B2%3B3%3B4%3B5%3B6%3B7%3B8%3B9%3B10%3B11%3B14%3B15%3B18%3B23%3B24%3B25%3B26%3B28%3B29%3B30%3B31%3B32%3B33%3B%7C
大家好,我现在才意识到我一直在问的问题是无关紧要的 :( 但有一个答案是正确的。
【问题讨论】:
-
到目前为止你有什么?
-
Matcher.find 按序列匹配。您应该转义特殊字符 - 请看下面的示例。还可以尝试缓存已编译的 Pattern(不要每次都编译它)以提高性能。
-
尝试在末尾删除 \\$ - 虽然您的输入超过一行,但可能会导致问题
-
@arik-so:看起来您不必使用正则表达式。在 Java 中,有更方便的方法来访问标头。详情请查看我的更新回复。
-
谢谢,zacheusz,这很有趣,但问题是:它不是一个简单的标题,但我必须以某种方式处理该标题。我不需要获取整个标题,而是它的最后 8 个字节(根据维基百科)或 phpwebsocket 所做的任何事情,然后为我的反应处理它(WebSocket 并不容易:D)