【发布时间】:2018-08-16 09:47:19
【问题描述】:
我有一个循环,有时包含以下数据:
b"\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00X\x1D›¿\x04\x04›?‹„\x12¿Ã’\x11?"
当我将它放入 regex101 时,我可以使用以下正则表达式匹配项目:
/((\\x[\d]{2}){4,}.*)/gm
查看示例:https://regex101.com/r/cMyKVg/1/
当我把它放在我的 php 脚本中时,它是这样的:
preg_match( '/(x)/m', $value, $matches )
$value 具有上述字符串的值。
我没有使用此代码的匹配项。 我也尝试过逐字匹配:
preg_match( '/((\\x[\d]{2}){4,}.*)/m', 'b"\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00X\x1D›¿\x04\x04›?‹„\x12¿Ã’\x11?"', $matches ),
但它不匹配任何东西。
我不想在我的数据库中使用这个值,因此我想使用正则表达式来跳过这样的值。
有人可以向我解释这种行为并可能帮助解决它吗?
编辑:
我有一种感觉,我使用的字符串实际上并不是preg_match 中的内容,而是我使用var_dump 获得的值,但似乎preg_match 获得了不同的值。我不小心输入了一个错误,然后我收到了这条消息:
ErrorException : preg_match(): Compilation failed: missing ) at offset 3
at /Users/used/Sites/project/app/Console/Commands/ExtractLibraryFileMetaData.php:204
200| dd(
201| $value,
202| \gettype($value),
203| $regex = '/(\\)/',
> 204| preg_match( $regex, $value, $matches ),
205| $matches
206| );
207| }
208| if ( preg_match( '/((\\x[\d]{2}){4,}.*)/m', $value ) ) {
Exception trace:
1 preg_match("/(\)/", "\\\\\\\\\\X���?���Ò?")
我不知道是什么原因造成的。它仍然是相同的值,但显示方式不同...
【问题讨论】:
-
我认为您的主要问题是输入是二进制字符串,而不是文本字符串。即
\x00指的是NUL字节(U+0000)而不是文本"\x00"。 -
您确定您在问题中分享了确切的数据吗?
'/(x)/m'对'b"\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00X\x1D›¿\x04\x04›?‹„\x12¿Ã’\x11?"'没有意义 -
你需要更多
\-> 3v4l.org/US9Th -
这对我来说是 XY 问题的味道......
标签: php regex preg-match