Php 为什么正则表达式不能匹配引号?

Php 为什么正则表达式不能匹配引号?,php,regex,wordpress,unicode,Php,Regex,Wordpress,Unicode,在我的wordpress帖子内容中,我有一行[yu_TOC title=“Short Stories”]。我正试着与之相匹配 preg_match('/\[yu_TOC title=\"(.*?)\"\s*\]/', $content[0], $matchedTitle); 我已经使用error_log(substr($content,01000))打印出了我想要匹配的行 输出(它的相关部分)是[yu\u TOC title=&8221;短篇小说&&8221;] 是否预期引号已从“更改为&82

在我的wordpress帖子内容中,我有一行
[yu_TOC title=“Short Stories”]
。我正试着与之相匹配

preg_match('/\[yu_TOC title=\"(.*?)\"\s*\]/', $content[0], $matchedTitle);
我已经使用
error_log(substr($content,01000))打印出了我想要匹配的行

输出(它的相关部分)是
[yu\u TOC title=&8221;短篇小说&&8221;]

是否预期引号已从
更改为
&8221;

为什么我的图案与应该匹配的线条不匹配

如何修复它


更新:我尝试用{}s替换[]s,仍然是同一个问题。

如果这些引号已更改,并且您还希望匹配编码版本,则可以使用来匹配捕获组中的其中一个,然后使用
\1
进行与附带的结束匹配相同的匹配

您的值位于第二个捕获组中,因为第一个组用于反向引用

\[yu_TOC title=("|”)(.*?)\1\s*\]
|

注意您不必逃避

比如说

$content = ["[yu_TOC title=&#8221;Short Stories&#8221;]</p>"];
preg_match('/\[yu_TOC title=("|&#8221;)(.*?)\1\s*\]/', $content[0], $matchedTitle);
print_r($matchedTitle);

在将内容传递给preg_match之前,它看起来像是用或类似的东西编码的。@MichalHynčica是的,我注意到了很多:)谢谢!你知道引号为什么变了吗?当字符变为unicode等价物时,有什么一般规则吗?不幸的是,我对wordpress本身一无所知,所以我恐怕不知道这个问题的答案。
Array
(
    [0] => [yu_TOC title=&#8221;Short Stories&#8221;]
    [1] => &#8221;
    [2] => Short Stories
)