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

时间:2019-10-02 16:32:57

标签: php regex wordpress unicode

在我的wordpress帖子内容中,我有一行[yu_TOC title="Short Stories"]。我正在尝试将其与

匹配
preg_match('/\[yu_TOC title=\"(.*?)\"\s*\]/', $content[0], $matchedTitle);

我已经使用error_log(substr($content, 0, 1000));打印了我想匹配的行。

输出(相关部分)为[yu_TOC title=&#8221;Short Stories&#8221;]</p>

是否期望引号从"更改为&#8221;

为什么我的模式不匹配应匹配的行?

如何解决?

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

1 个答案:

答案 0 :(得分:1)

如果这些引号已更改,并且您还想匹配编码版本,则可以使用alternation来匹配捕获组中的任何一个,然后使用backreference \1与伴随的闭幕比赛相同的比赛。

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

\[yu_TOC title=("|&#8221;)(.*?)\1\s*\]

Regex demo | Php demo

请注意,您不必逃避"

例如

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

输出

Array
(
    [0] => [yu_TOC title=&#8221;Short Stories&#8221;]
    [1] => &#8221;
    [2] => Short Stories
)
相关问题