我有以下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行(如上所述):
第2行:test1数据
:数据
第3行
我想要的是:
数据:数据
答案 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
。