-1

输入字符串:

:txt{sometext}:alpha

我想提取这样的数据(从括号中提取):

结果使用preg_match_all()

sometext

像这样尝试,但这些都不起作用:

php >  preg_match_all('/^(\:txt)(.*)+(\{)(.*)+(\})/i', ':txt{sometext}:alpha', $m); var_dump($m);
array(6) {
  [0] =>
  array(1) {
    [0] =>
    string(14) ":txt{sometext}"
  }
  [1] =>
  array(1) {
    [0] =>
    string(1) ":"
  }
  [2] =>
  array(1) {
    [0] =>
    string(0) ""
  }
  [3] =>
  array(1) {
    [0] =>
    string(1) "{"
  }
  [4] =>
  array(1) {
    [0] =>
    string(0) ""
  }
  [5] =>
  array(1) {
    [0] =>
    string(1) "}"
  }
}

注意:作为我喜欢的样本:txt{sometext}:alpha:another{mydata},所以我可以从中提取数据:another并给出类似的结果mydata

结果:

嗅探器的结果:

php >  preg_match_all('/(?<=:txt{)([^}]+)(?=})/', ':txt{sometext}:alpha', $x); var_dump($x);
array(2) {
  [0] =>
  array(1) {
    [0] =>
    string(8) "sometext"
  }
  [1] =>
  array(1) {
    [0] =>
    string(8) "sometext"
  }
}

杰瑞的结果:

php >  preg_match_all('/^:txt\{([^}]+)\}/', ':txt{sometext}:alpha', $x); var_dump($x);
array(2) {
  [0] =>
  array(1) {
    [0] =>
    string(14) ":txt{sometext}"
  }
  [1] =>
  array(1) {
    [0] =>
    string(8) "sometext"
  }
}
4

1 回答 1

1

为什么这一切,为什么不只是:

(?<=:txt{)([^}]+)(?=})

正则表达式 101 演示

于 2013-09-10T15:14:22.640 回答