2016-11-12 64 views
1

我很努力使一个PHP正则表达式的工作。PHP正则表达式不工作,返回主题字符串,而不是正则表达式结果

做正则表达式在JavaScript的工作:

场景1:JavaScript的正则表达式

在PHP

: 我经历的XPath获取节点值:

$yearNode = $xpath->query(".//h2/a", $node)[0]; 
$year = $yearNode->nodeValue; 

我把它添加到JSON AJAX回应:

$responseStr[$i]['year'] = $year; 

我正在使用ja的响应vascript:

var year = results[j]['year'].match("[0-9][0-9][0-9][0-9]"); 

这个工作正常,但如果我尝试在PHP中:

场景2:PHP

$yearNode = $xpath->query(".//h2/a", $node)[0]; 
$yearMatches = preg_match("[0-9][0-9][0-9][0-9]", $yearNode, $matches); 
$year = $matches[0][0]; 
$responseStr[$i]['year'] = $year; 

然后尝试得到的结果在javascript:

var year = results[j]['year']; 

我得到了整个主题字符串,而不是正则表达式匹配,这与场景1中的php json响应等效,即

$yearNode = $xpath->query(".//h2/a", $node)[0]; 

出了什么问题?我读过关于PHP的正则表达式的一些文档一样http://php.net/manual/fr/function.preg-match.php,但不能使它工作

我想我可能误解了PHP正则表达式的结果数组

$year = $matches[0][0]; 

我试过很多的组合,以测试数组内的所有项目,如

$ year = $ matches [x] [0];

$年= $比赛[0] [X];

,但不能得到完全相同4位(年)预期的结果,我很容易得到的JavaScript正则表达式案例1中

在此先感谢您的帮助

+1

正则表达式的分隔符。和'print_r()'看看$匹配包含什么。 – mario

+0

正则表达式分隔符是什么意思?你的意思是用print_r替换回显?如果添加的开始''^和结束'$'边界,并确保'$ yearMatches === 1' – crazyghandi

回答

3

尝试之前和之后添加/您正则表达式:

$yearMatches = preg_match("/[0-9][0-9][0-9][0-9]/", $yearNode, $matches); 

优选地,添加的开始^并结束$界限:

$yearMatches = preg_match("/^[0-9][0-9][0-9][0-9]$/", $yearNode, $matches); 
+1

甚至会更好。 –

+0

@我 - 你说得对。我更新了我的答案。 – Ibrahim

+0

谢谢我试过它的结果很奇怪,这个作品: $ yearNode = $ xpath-> query($ yearXpath,$ node)[0]; $ year = $ yearNode-> nodeValue; $ yearMatches =的preg_match( “/^[0-9] [0-9] [0-9] [0-9] $ /”,$年, $匹配);
这里我不试图访问结果,所以我得到的原始字符串按预期,但如果我加: $ year = $ matches [0]; 然后我得到一个json解析ajax失败 – crazyghandi

2

确定它可能的语义,但是这个工程

$yearMatches = preg_match("/[0-9][0-9][0-9][0-9]/", $title, $matches); 
$year = $matches[0]; 

(除去^和$,因为4位数字是一个字符串内)

的感谢!