php preg_match s 和 m 修饰符不适用于多行
php preg_match s and m modifiers not working for multiple lines
我有以下由多行组成的输入字符串:
BYTE ,,,,,,,,,,,,,,,,,,,,,,,[=12=]C,,,,,,,,,,,,,,,, // comment
BYTE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
我使用下面的 preg_match 语句来匹配数据部分(因此只有十六进制值)而不是前面的白色 space 和文本,也不匹配尾随的白色 space 和评论区:
preg_match('/($.*?) /s', $sFileContents, $aResult);
输出是这样的:
output: Array
(
[0] => ,,,,,,,,,,,,,,,,,,,,,,,[=14=]C,,,,,,,,,,,,,,,,
[1] => ,,,,,,,,,,,,,,,,,,,,,,,[=14=]C,,,,,,,,,,,,,,,,
)
如您所见,匹配似乎是正确的,但第一行输入重复了两次。 's' 修饰符应该可以帮助我越过行尾,但我似乎无法越过第一行。
有人知道如何进行吗?
为此您不需要 s
(DOTALL) 标记。您可以使用:
preg_match_all('/($[0-9A-Fa-f]{2}(?:,$[0-9A-Fa-f]{2})+)/', $input, $m);
print_r($m[1]);
您可以轻松匹配所有行的数据:
preg_match_all('/$[\dA-Fa-f,$]+/', $sFileContents, $aResult);
echo "<pre>".print_r($aResult,true);
输出:
$aResultArray:
(
[0] => Array
(
[0] => ,,,,,,,,,,,,,,,,,,,,,,,[=11=]C,,,,,,,,,,,,,,,,
[1] => ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
)
)
我有以下由多行组成的输入字符串:
BYTE ,,,,,,,,,,,,,,,,,,,,,,,[=12=]C,,,,,,,,,,,,,,,, // comment
BYTE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
我使用下面的 preg_match 语句来匹配数据部分(因此只有十六进制值)而不是前面的白色 space 和文本,也不匹配尾随的白色 space 和评论区:
preg_match('/($.*?) /s', $sFileContents, $aResult);
输出是这样的:
output: Array
(
[0] => ,,,,,,,,,,,,,,,,,,,,,,,[=14=]C,,,,,,,,,,,,,,,,
[1] => ,,,,,,,,,,,,,,,,,,,,,,,[=14=]C,,,,,,,,,,,,,,,,
)
如您所见,匹配似乎是正确的,但第一行输入重复了两次。 's' 修饰符应该可以帮助我越过行尾,但我似乎无法越过第一行。
有人知道如何进行吗?
为此您不需要 s
(DOTALL) 标记。您可以使用:
preg_match_all('/($[0-9A-Fa-f]{2}(?:,$[0-9A-Fa-f]{2})+)/', $input, $m);
print_r($m[1]);
您可以轻松匹配所有行的数据:
preg_match_all('/$[\dA-Fa-f,$]+/', $sFileContents, $aResult);
echo "<pre>".print_r($aResult,true);
输出:
$aResultArray:
(
[0] => Array
(
[0] => ,,,,,,,,,,,,,,,,,,,,,,,[=11=]C,,,,,,,,,,,,,,,,
[1] => ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
)
)