Php 为什么正则表达式不能匹配引号?
在我的wordpress帖子内容中,我有一行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
[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=”Short Stories”]</p>"];
preg_match('/\[yu_TOC title=("|”)(.*?)\1\s*\]/', $content[0], $matchedTitle);
print_r($matchedTitle);
在将内容传递给preg_match之前,它看起来像是用或类似的东西编码的。@MichalHynčica是的,我注意到了很多:)谢谢!你知道引号为什么变了吗?当字符变为unicode等价物时,有什么一般规则吗?不幸的是,我对wordpress本身一无所知,所以我恐怕不知道这个问题的答案。
Array
(
[0] => [yu_TOC title=”Short Stories”]
[1] => ”
[2] => Short Stories
)