尝试匹配"space double quote"模式时失败preg_match() 在从 MSSQL DB 查询的字符串上)



你能告诉我这是怎么回事吗?

我从MSSQL DB查询了这个字符串

$string = 'Key Lesson: "<u>Part 1</u>';  

看到双引号前的空格了吗?由于某些原因,这三个匹配尝试都失败了:

<?php
if(preg_match('~Key Lesson: "<u>Part 1</u>~i', $string, $matches) == 1)
if(preg_match('~Key Lesson:[[:blank:]]+"<u>Part 1</u>~i', $string, $matches) == 1)
if(preg_match('~Key Lesson:[[:space:]]+"<u>Part 1</u>~i', $string, $matches) == 1)
?>

但是这两个都可以:

if(preg_match('~Key Lesson:h"<u>Part 1</u>~i', $string, $matches) == 1)
if(preg_match('~Key Lesson:."<u>Part 1</u>~i', $string, $matches) == 1)

里面的字符到底是什么?它是怎么进去的?

我唯一的猜测,考虑到它是一个双引号,字符串是从MSSQL数据库中提取的,它与数据准备有关,当数据存储在DB中或当它被查询使用时。(我使用的是mssql_query() &mssql_fetch_array()获取数据的PHP函数)

你的代码和我一起工作没有任何问题。尝试下面的代码,并检查它是否适用于您:

<?php
$string = 'Key Lesson: "<u>Part 1</u>';  
if(preg_match('~Key Lesson: "<u>Part 1</u>~i', $string, $matches) == 1) echo 'OK 1 ';
if(preg_match('~Key Lesson:[[:blank:]]+"<u>Part 1</u>~i', $string, $matches) == 1) echo 'OK 2 ';
if(preg_match('~Key Lesson:[[:space:]]+"<u>Part 1</u>~i', $string, $matches) == 1) echo 'OK 3 ';
if(preg_match('~Key Lesson:h"<u>Part 1</u>~i', $string, $matches) == 1) echo 'OK 4 ';
if(preg_match('~Key Lesson:."<u>Part 1</u>~i', $string, $matches) == 1) echo 'OK 5 ';
?>

演示:http://ideone.com/R1CeWy

最新更新