0

我遇到了 preg_match 的问题,不知何故,我还是 preg_match 的新手,我仍然无法让它像我想要的那样工作。

这是我的数据...

String_Length_Location_Time_Degree_Alt

我正在使用此 preg_match 将数据拆分为变量...

preg_match('(?<data1>)_(?<data2>)_(?<data3>)_(?<data4>)_(?<data5>)_(?<data6>)', $str, $matches);

我收到以下错误“preg_match(): Unknown modifier '_' in [...][...]

有谁知道可能是什么问题?

谢谢!

4

3 回答 3

3

您没有任何分隔符。定界符将模式括起来:

使用 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,它将一个字符串分成一个数组,每次遇到分隔符时都会拆分字符串,您可以将其指定为 undescore, "_"

于 2013-09-30T00:31:47.227 回答
0

既然你所有的数据都用下划线分隔,为什么不使用explode

$data = explode('_', $str);
$data[0] = 'string';
$data[1] = 'Length'; //etc...
于 2013-09-30T00:28:44.417 回答
0

你的代码有两个问题...

  1. 您缺少包含正则表达式的分隔符。
  2. 你实际上并没有捕捉到任何东西。

修复您的代码

/除了在每一端添加的分隔符和添加.*来捕获之间的任何字符之外,没什么可说的_

preg_match('/(?<data1>.*)_(?<data2>.*)_(?<data3>.*)_(?<data4>.*)_(?<data5>.*)_(?<data6>.*)/', $string, $match);

备择方案

您可以轻松地explode为此使用该功能,因为您的数据仅由一个字符分隔。

如果您想使用正则表达式,您也可以使用preg_match_allwhich 将使您的代码更易于阅读(假设您阅读了正则表达式;))

$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"
  }
}


*/
于 2013-09-30T00:41:21.507 回答