我遇到了preg_match的问题,不知何故,我仍然是preg_match的新手,我仍然无法让它像我想要的那样工作。
这是我的数据......
String_Length_Location_Time_Degree_Alt
我正在使用这个preg_match将数据拆分为varibles ...
preg_match('(?<data1>)_(?<data2>)_(?<data3>)_(?<data4>)_(?<data5>)_(?<data6>)', $str, $matches);
我收到以下错误“preg_match(): [...] [...] 中的未知修饰符'_'”
有没有人知道会出现什么问题?
谢谢!
答案 0 :(得分:3)
您没有delimiters。分隔符包含模式:
使用PCRE功能时,要求图案由分隔符包围。分隔符可以是任何非字母数字,非反斜杠,非空白字符。
通常,“修饰符”是为正则表达式设置选项的字符(区分大小写,多行模式等),在结束分隔符之后来自。
因此,此错误消息表示它认为您使用_
作为修饰符,因为它似乎在模式之后。尝试将模式封装在标准分隔符/
中,与/PATTERN_GOES_HERE/
您还需要匹配捕获组中的内容。 .*
会做(匹配任何数量的任何内容):
preg_match('/(?<data1>.*)_(?<data2>.*)_(?<data3>.*)_(?<data4>.*)_(?<data5>.*)_(?<data6>.*)/', $str, $matches);
print_r($matches);
输出:
Array
(
[0] => String_Length_Location_Time_Degree_Alt
[data1] => String
[1] => String
[data2] => Length
[2] => Length
[data3] => Location
[3] => Location
[data4] => Time
[4] => Time
[data5] => Degree
[5] => Degree
[data6] => Alt
[6] => Alt
)
或者,您的案例看起来像是explode
的一个很好的候选者,它将字符串分隔成一个数组,每当它遇到一个分隔符时分割该字符串,您将其指定为非定义字符{{1} }。
答案 1 :(得分:0)
由于您的所有数据都以下划线分隔,为什么不使用explode
$data = explode('_', $str);
$data[0] = 'string';
$data[1] = 'Length'; //etc...
答案 2 :(得分:0)
您的代码存在两个问题......
在每一端添加的分隔符/
以及添加.*
以在_
preg_match('/(?<data1>.*)_(?<data2>.*)_(?<data3>.*)_(?<data4>.*)_(?<data5>.*)_(?<data6>.*)/', $string, $match);
您可以轻松使用explode
功能,因为您的数据仅由字符分隔。
如果你想使用正则表达式,你也可以使用preg_match_all
,这将使你的代码更容易阅读(假设你读取正则表达式;)
$string = "String_Length_Location_Time_Degree_Alt";
$explode = explode('_', $string);
var_dump($explode);
preg_match_all('/_*(.+?)(?:_|$)/',$string, $matches);
var_dump($matches);
/**
Output for explode:
array(6) {
[0]=>
string(6) "String"
[1]=>
string(6) "Length"
[2]=>
string(8) "Location"
[3]=>
string(4) "Time"
[4]=>
string(6) "Degree"
[5]=>
string(3) "Alt"
}
Output for preg_match_all:
array(2) {
[0]=>
array(6) {
[0]=>
string(7) "String_"
[1]=>
string(7) "Length_"
[2]=>
string(9) "Location_"
[3]=>
string(5) "Time_"
[4]=>
string(7) "Degree_"
[5]=>
string(3) "Alt"
}
[1]=>
array(6) {
[0]=>
string(6) "String"
[1]=>
string(6) "Length"
[2]=>
string(8) "Location"
[3]=>
string(4) "Time"
[4]=>
string(6) "Degree"
[5]=>
string(3) "Alt"
}
}
*/