2011-11-26 28 views
1
开头的行
$stxt = "000 
WGCA82 TJSJ 260200 
FLSSJU 

FLOOD ADVISORY 
NATIONAL WEATHER SERVICE SAN JUAN PR 
1000 PM AST FRI NOV 25 2011 

PRC013-017-039-054-141-260209- 
/O.EXP.TJSJ.FA.Y.0568.000000T0000Z-111126T0200Z/ 
/00000.N.ER.000000T0000Z.000000T0000Z.000000T0000Z.OO/ 
BARCELONETA PR-CIALES PR-FLORIDA PR-UTUADO PR-ARECIBO PR- 
1000 PM AST FRI NOV 25 2011 

...THE FLOOD ADVISORY WILL EXPIRE AT 1000 PM AST FOR ARECIBO... 
UTUADO...FLORIDA...CIALES AND BARCELONETA MUNICIPALITIES... 

&& 

LAT...LON 1842 6666 1844 6656 1830 6657 1831 6672 

$$ 
GV"; 

preg_match("(NATIONAL WEATHER SERVICE.*\n)", $stxt, $ofc); 
print_r($ofc); 

它返回一个空数组。帮助...我希望它匹配国家天气服务圣胡安PR(或任何其他国家的国家气象局的办公室)PHP preg_match在多行变量中查找以

+1

它返回'$ ofc [0]' – Toto

回答

2

你需要添加分隔符到你的正则表达式,例如,

preg_match("/(NATIONAL WEATHER SERVICE.*\n)/", $stxt, $ofc); 
+0

'('和')'中的整个匹配是已经在问题中给出的正则表达式中的有效分隔符。 – hakre

+0

@hakre:它们是有效的分隔符,但它看起来像OP正在尝试使用括号来捕获不会发生的匹配,除非使用其他分隔符。 – Clive

+0

完全不是,匹配0将包含任何情况下的匹配,即所给示例的'$ ofc [0]'。我认为OP运行了一些其他问题,请参阅[我的答案](http://stackoverflow.com/q/8286673/367456)。 – hakre

0

如前所述,您需要为您的正则表达式添加分隔符。
在您现有的代码()作为分隔符!但你打算用它们作为捕捉括号。由于您的正则表达式中没有捕获括号,因此没有捕获任何内容。

+0

0是捕获组,'$ ofc [0]'包含匹配。 – hakre

1

它看起来像你在这里运行一个错误。启用错误报告并显示错误以找出答案。喜欢的东西:

警告:的preg_match():内部pcre_fullinfo()错误-3线...

当这种错误发生时,比赛数组将为空。测试你的正则表达式是否失败:

# Report all and display error messages 
error_reporting(~0); 
ini_set('display_errors', 1); 

$result = preg_match("(NATIONAL WEATHER SERVICE.*\n)", $stxt, $ofc); 

# Check return value for an error 
if (FALSE === $result) 
{ 
    throw new RuntimeException('preg_match() failed.'); 
} 

顺便说一句,你的代码示例适合我。但是,某些PHP安装与您所描述的类似,请参阅codepad.org example