编译失败:POSIX 偏移处不支持整理元素
Compilation failed: POSIX collating elements are not supported at offset
我想将字符串转换为带有模式的数组。但是我的正则表达式给了我警告。
这是一个字符串:
$string = typ="bar" title="Example" enabled=true count=true style="float: left; width: 30%;"
我的正则表达式:
$regex='/(.*?)[=\"|=](.*?)\"*\s*/';
preg_match_all($regex, $string1, $matchesreg, PREG_SET_ORDER);
正则表达式输出不正确。最后一个数组必须进一步拆分
$regex='/(.?)="(.?)"\s*/';
preg_match_all($regex, $string1, $matchesreg, PREG_SET_ORDER);
输出
Array
(
[0] => Array
(
[0] => typ="bar"
[1] => typ
[2] => bar
) ...
[2] => Array
(
[0] => enabled=true count=true style="float: left; width: 30%;"
[1] => enabled=true count=true style
[2] => float: left; width: 30%;
)
)
我想要的输出如下:
php
Array
(
[0] => Array
(
[0] => typ="bar"
[1] => typ
[2] => bar
)
[1] => Array
(
[0] => title="Example"
[1] => title
[2] => Example
)
[2] => Array
(
[0] => enabled=true
[1] => enabled
[2] => true
)
[3] => Array
(
[0] => count=true
[1] => count
[2] => true
)
[4] => Array
(
[0] => style="float: left; width: 30%;"
[1] => style
[2] => float: left; width: 30%;
)
)
你的表达似乎没问题。您的字符列表中有两个 =
,我删除了其中一个:
(.*?)[=\"|](.*?)\"*\s*
如果您愿意,您可以 modify/change 在 this link 中表达您的表情。
正则表达式电路
你可以在这个link中想象你的表情:
代码
$string1 = 'typ="bar" title="Example" enabled=true count=true style="float: left; width: 30%;';
$regex = '/(.*?)[=\"|](.*?)\"*\s*/s';
preg_match_all($regex, $string1, $matchesreg, PREG_SET_ORDER);
var_dump($matchesreg);
输出
array(7) {
[0]=>
array(3) {
[0]=>
string(5) "typ=""
[1]=>
string(3) "typ"
[2]=>
string(0) ""
}
[1]=>
array(3) {
[0]=>
string(5) "bar" "
[1]=>
string(3) "bar"
[2]=>
string(0) ""
}
[2]=>
array(3) {
[0]=>
string(7) "title=""
[1]=>
string(5) "title"
[2]=>
string(0) ""
}
[3]=>
array(3) {
[0]=>
string(9) "Example" "
[1]=>
string(7) "Example"
[2]=>
string(0) ""
}
[4]=>
array(3) {
[0]=>
string(8) "enabled="
[1]=>
string(7) "enabled"
[2]=>
string(0) ""
}
[5]=>
array(3) {
[0]=>
string(11) "true count="
[1]=>
string(10) "true count"
[2]=>
string(0) ""
}
[6]=>
array(3) {
[0]=>
string(12) "true style=""
[1]=>
string(10) "true style"
[2]=>
string(0) ""
}
}
您可以使用
preg_match_all('~([^\s=]+)=(?|"([^"]*)"|(\S+))~', $s, $m, PREG_SET_ORDER, 0)
详情
([^\s=]+)
- 第 1 组:除空格和 =
之外的一个或多个字符
=
- 一个 =
字符
(?|"([^"]*)"|(\S+))
- 分支重置组匹配
"([^"]*)"
- "
,然后将"
以外的任何0个或多个字符捕获到第2组,然后匹配"
|
- 或
(\S+)
- 第 2 组:一个或多个 non-whitespace 个字符。
我想将字符串转换为带有模式的数组。但是我的正则表达式给了我警告。
这是一个字符串:
$string = typ="bar" title="Example" enabled=true count=true style="float: left; width: 30%;"
我的正则表达式:
$regex='/(.*?)[=\"|=](.*?)\"*\s*/';
preg_match_all($regex, $string1, $matchesreg, PREG_SET_ORDER);
正则表达式输出不正确。最后一个数组必须进一步拆分 $regex='/(.?)="(.?)"\s*/'; preg_match_all($regex, $string1, $matchesreg, PREG_SET_ORDER); 输出
Array
(
[0] => Array
(
[0] => typ="bar"
[1] => typ
[2] => bar
) ...
[2] => Array
(
[0] => enabled=true count=true style="float: left; width: 30%;"
[1] => enabled=true count=true style
[2] => float: left; width: 30%;
)
)
我想要的输出如下:
php
Array
(
[0] => Array
(
[0] => typ="bar"
[1] => typ
[2] => bar
)
[1] => Array
(
[0] => title="Example"
[1] => title
[2] => Example
)
[2] => Array
(
[0] => enabled=true
[1] => enabled
[2] => true
)
[3] => Array
(
[0] => count=true
[1] => count
[2] => true
)
[4] => Array
(
[0] => style="float: left; width: 30%;"
[1] => style
[2] => float: left; width: 30%;
)
)
你的表达似乎没问题。您的字符列表中有两个 =
,我删除了其中一个:
(.*?)[=\"|](.*?)\"*\s*
如果您愿意,您可以 modify/change 在 this link 中表达您的表情。
正则表达式电路
你可以在这个link中想象你的表情:
代码
$string1 = 'typ="bar" title="Example" enabled=true count=true style="float: left; width: 30%;';
$regex = '/(.*?)[=\"|](.*?)\"*\s*/s';
preg_match_all($regex, $string1, $matchesreg, PREG_SET_ORDER);
var_dump($matchesreg);
输出
array(7) {
[0]=>
array(3) {
[0]=>
string(5) "typ=""
[1]=>
string(3) "typ"
[2]=>
string(0) ""
}
[1]=>
array(3) {
[0]=>
string(5) "bar" "
[1]=>
string(3) "bar"
[2]=>
string(0) ""
}
[2]=>
array(3) {
[0]=>
string(7) "title=""
[1]=>
string(5) "title"
[2]=>
string(0) ""
}
[3]=>
array(3) {
[0]=>
string(9) "Example" "
[1]=>
string(7) "Example"
[2]=>
string(0) ""
}
[4]=>
array(3) {
[0]=>
string(8) "enabled="
[1]=>
string(7) "enabled"
[2]=>
string(0) ""
}
[5]=>
array(3) {
[0]=>
string(11) "true count="
[1]=>
string(10) "true count"
[2]=>
string(0) ""
}
[6]=>
array(3) {
[0]=>
string(12) "true style=""
[1]=>
string(10) "true style"
[2]=>
string(0) ""
}
}
您可以使用
preg_match_all('~([^\s=]+)=(?|"([^"]*)"|(\S+))~', $s, $m, PREG_SET_ORDER, 0)
详情
([^\s=]+)
- 第 1 组:除空格和=
之外的一个或多个字符
=
- 一个=
字符(?|"([^"]*)"|(\S+))
- 分支重置组匹配"([^"]*)"
-"
,然后将"
以外的任何0个或多个字符捕获到第2组,然后匹配"
|
- 或(\S+)
- 第 2 组:一个或多个 non-whitespace 个字符。