正则表达式和大小写

时间:2012-05-06 08:04:33

标签: php regex case-insensitive

我正在使用这个

preg_match('/<meta\s+http-equiv="Content-Type" content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match)

获取 charset ,但这不适用于此

<META http-equiv=Content-Type content="text/html; charset=windows-1256">

任何想法?

2 个答案:

答案 0 :(得分:1)

您在preg_match()中有双引号但在html示例中没有。

此处: http-equiv =内容类型

如果您想支持preg_match()在此处使用和不使用引号,只需将代码更改为:

preg_match('/<meta\s+http-equiv=(")?Content-Type(")?\s+content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match);

在属性订单更改时可以使用的更好的版本:

preg_match('/<meta.+?content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match);

答案 1 :(得分:1)

如果你只对获取字符集感兴趣,为什么不使用更简单的东西:

preg_match('/charset=([^"]+)/i', $html, $match);

当然,你可以调整它以满足你的特定需求,但要保持简单,让它更容易上班。