【发布时间】:2012-04-14 14:28:22
【问题描述】:
我目前正在使用此代码匹配 HTML:
preg_match('/<\/?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;/u', $html, $match, PREG_OFFSET_CAPTURE, $position)
它完美匹配所有内容,但是如果我有一个多字节字符,则在返回位置时将其计为 2 个字符。
例如,返回的 $match 数组将给出如下内容:
array
0 =>
array
0 => string '<br />' (length=6)
1 => int 132
1 =>
array
0 => string 'br' (length=2)
1 => int 133
<br /> 匹配的实数是 128,但是有 4 个多字节字符,所以它给出 132。我真的认为添加 /u 修饰符可以让它知道发生了什么,但没有运气。
【问题讨论】:
-
如果你好奇我用这个做什么:stackoverflow.com/questions/1193500/…
-
[this][1] 有帮助吗? [1]:stackoverflow.com/questions/1725227/preg-match-and-utf-8-in-php
-
是的,它很有帮助。很惊讶这些线程在我询问时没有出现在建议中
-
我实际上可以通过计算我在函数中所在点之前的 mb 字符数来手动更正位置。我只是无法为英文键盘上的所有“标准”字符找到一个好的正则表达式。
-
或许你可以使用stackoverflow.com/a/3432593/107152"之前将编码改为UTF-32,然后将位置除以4"。
标签: php regex multibyte multibyte-functions