【问题标题】:extracting unicode string with preg_match_all()使用 preg_match_all() 提取 unicode 字符串
【发布时间】:2012-04-15 20:47:25
【问题描述】:

我正在尝试使用以下代码提取字符串:

$item = 'id="firstname" l="Prénom" n="firstname" t="text" v=""';
preg_match_all('#(?:l|label|lbl)\s*=\s*"([\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}\x{00C6}\x{00C7}\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{00CC}\x{00CD}\x{00CE}\x{00CF}\x{00D0}\x{00D1}\x{00D2}\x{00D3}\x{00D4}\x{00D5}\x{00D6}\x{00D7}\x{00D8}\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{00DD}\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{00E6}\x{00E7}\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{00EC}\x{00ED}\x{00EE}\x{00EF}\x{00F0}\x{00F1}\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{00FD}\x{00FF}\sa-zA-Z0-9_-]+)"#is', $item, $m);

当使用像 "firstname" 这样的非 unicode 字符串时它可以正常工作,但是当 $item 包含像 "Prénom"

这样的字符串时会返回一个空值

知道为什么吗?

【问题讨论】:

    标签: php regex unicode preg-match-all


    【解决方案1】:

    只需将u 添加到修改器列表中:isu

    【讨论】:

    • 因为我只想要数字和字母(包括像é这样的法语字符),所以执行“([^"]+?)”可以启用一些字符,如#@等
    • 然后只需将u 添加到修改器列表中:isu。并且可能将代码列表缩短为\x{00C0}-\x{00FF}。在您的示例中,您错过了00FE
    • 你说得对,只需要添加u 修饰符即可。为了后代,最好相应地更改答案。至于缺失值,实际上有五个[\u{00DE}\u{00DF}\u{00E8}\u{00E9}\u00FE] - 我很确定这是故意的。
    猜你喜欢
    • 2012-05-27
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多