需要一个PHP正则表达式三个不同的文本行?

时间:2011-09-12 19:24:03

标签: php regex

我有以下3行文本,需要一个正则表达式才能捕获数据。数据可以包含任何字符。带有单词test的行可以是(test1 | test2 | test3 | test4)

1. test1 data- data 
1. data- data
data- data

这是我试图做的但没有工作。

   $remove_test_name = "(?:test1|test2|test3|test4)";

   preg_match("/(?:\d+\.)? $remove_test_name (.*)\-(.*)/",$string,$matches);
   echo $matches[1] . "-" . $matches[2];

我得到的输出是第1行(如上所述):

  

:test1数据

第2行

  

:数据

第3行

  

我想要的是:

  

数据:数据

2 个答案:

答案 0 :(得分:1)

我假设输入是由短划线分隔的列,输入中没有其他短划线。因此,/(\s*(.*)\s*-){2}\s*(.*)\s*/应该这样做。

答案 1 :(得分:0)

这是我用来测试正则表达式的PHP和示例。

<?php
$sample = array(
    '1. test1 data- data ',
    '12. data- data',
    'key- value',
    '2. test2 key2- value2',
    '3. test3 data- data ',
    '4. test4 data- data ',
    '5. test5 data- data '
);

foreach ($sample as $string) {
    $remove_test_name = '(?:test1|test2|test3|test4)';

    preg_match("/(?:\d+\.)?\s?$remove_test_name?\s?(.*)-(.*)/",$string,$matches);
    var_dump($matches);
    echo $matches[1] . "-" . $matches[2];
}
?>

这是输出

array
  0 => string '1. test1 data- data ' (length=20)
  1 => string 'data' (length=4)
  2 => string ' data ' (length=6)

data- data

array
  0 => string '12. data- data' (length=14)
  1 => string 'data' (length=4)
  2 => string ' data' (length=5)

data- data

array
  0 => string 'key- value' (length=10)
  1 => string 'key' (length=3)
  2 => string ' value' (length=6)

key- value

array
  0 => string '2. test2 key2- value2' (length=21)
  1 => string 'key2' (length=4)
  2 => string ' value2' (length=7)

key2- value2

array
  0 => string '3. test3 data- data ' (length=20)
  1 => string 'data' (length=4)
  2 => string ' data ' (length=6)

data- data

array
  0 => string '4. test4 data- data ' (length=20)
  1 => string 'data' (length=4)
  2 => string ' data ' (length=6)

data- data

array
  0 => string '5. test5 data- data ' (length=20)
  1 => string 'test5 data' (length=10)
  2 => string ' data ' (length=6)

test5 data- data 

在最后一种情况下,test5显示,因为它不在$remove_test_name