PHP字符串的特定正则表达式

时间:2014-08-22 14:28:40

标签: php

字符串总是不同的!我不知道Rate the Code实际上会是什么。

我正在寻找我正在尝试解析的PHP字符串的特定正则表达式。

我的字符串看起来像这样:

- :description: Rate the Code
  :long_description: ""
  - :description: Full Marks
    :long_description: ""
  - :description: No Marks
    :long_description: ""
- :description: Rate the Asthetics
  :long_description: This is a long description for Rate the Asthetics.
  - :description: Full Marks
    :long_description: ""
  - :description: No Marks
    :long_description: ""

每行后都有换行符。

我想解析Rate the Code这个词。这需要正则表达式寻找:

  • 最后一个冒号
  • 上移动两个字符
  • 然后获取文字,直到下一个换行符“\n”。

PHP:

if (strpos($explodearray[$i], 'description:') !== false) {
    echo $explodearray[$i]."\n";
}

3 个答案:

答案 0 :(得分:2)

使用描述的正则表达式回答:

/^.*:\s(.*)$/gm

DEMO 说明: 在:之后捕获文本,直到行尾。

它采用描述和长描述的值。

Php demo HERE

不需要PREG_MATCH_OFFSET,匹配[1]将包含匹配文本数组。

答案 1 :(得分:0)

我不是RegEx的最佳人选,所以可能有一个更短的方式来编写它,但如果我正确理解了这个问题,你想将这个平面文件格式转换为数组吗?

$ str是你的扁平结构字符串:

$re = "/\\s*\\-?\\s*:([a-zA-Z0-9\\_]*):\\s*(.*)\\n?/"; 
preg_match_all($re, $str, $matches);

会回来:

MATCH 1
1.  [3-14]  `description`
2.  [16-29] `Rate the Code`
MATCH 2
1.  [33-49] `long_description`
2.  [51-53] `""`
MATCH 3
1.  [59-70] `description`
2.  [72-82] `Full Marks`
MATCH 4
1.  [88-104]    `long_description`
2.  [106-108]   `""`
MATCH 5
1.  [114-125]   `description`
2.  [127-135]   `No Marks`
MATCH 6
1.  [141-157]   `long_description`
2.  [159-161]   `""`
MATCH 7
1.  [165-176]   `description`
2.  [178-196]   `Rate the Asthetics`
MATCH 8
1.  [200-216]   `long_description`
2.  [218-268]   `This is a long description for Rate the Asthetics.`
MATCH 9
1.  [274-285]   `description`
2.  [287-297]   `Full Marks`
MATCH 10
1.  [303-319]   `long_description`
2.  [321-323]   `""`
MATCH 11
1.  [329-340]   `description`
2.  [342-350]   `No Marks`
MATCH 12
1.  [356-372]   `long_description`
2.  [374-376]   `""`

答案 2 :(得分:-1)

如果没有更好地解释您的要求,那么:

if($myString=='- :description: Rate the Code' . "\n"){
  $myResult='Rate the Code';
}

在阅读了您的额外解释之后,为什么不使用:

$myString=<<<EOS
- :description: Rate the Code
  :long_description: ""
  - :description: Full Marks
    :long_description: ""
  - :description: No Marks
    :long_description: ""
- :description: Rate the Asthetics
  :long_description: This is a long description for Rate the Asthetics.
  - :description: Full Marks
    :long_description: ""
  - :description: No Marks
    :long_description: ""
EOS;

preg_match('/(:description:(.*))/', $myString, $matches);
var_dump($matches);