我有一个文本文件(“file.txt”):
5 (blah-blah) 001
2 (blah) 006
使用PHP代码通过在行[number]中搜索模式来查找括号中的第一个单词,表达式以及最后的3位或4位数字:
<?php
// file
$file = file("file.txt");
/* first line */
// match first word (number)
preg_match("/^(\d+)/",$file[0],$first_word);
// match expression within parentheses
preg_match("/(?<=\().*(?=\))/s",$file[0],$within_par);
// match last 3- & 4-digit numbers
preg_match("/(\d{3,4})?(?!.*(\d{3,4}))/",$file[0],$last_word);
/* repeats (second line) */
preg_match("/^(\d+)/",$file[1],$first_word2);
preg_match("/(?<=\().*(?=\))/s",$file[1],$within_par2);
preg_match("/(\d{3,4})?(?!.*(\d{3,4}))/",$file[1],$last_word2);
<?php
用于逐行显示匹配项的HTML代码:
<div>
<p><?php echo $first_word[0] ?></p>
<p><?php echo $within_par[0] ?></p>
<p><?php echo $last_word[0] ?></p>
</div>
<div>
<p><?php echo $first_word2[0] ?></p>
<p><?php echo $within_par2[0] ?></p>
<p><?php echo $last_word2[0] ?></p>
</div>
但我希望能够显示所有匹配,而不必单独列出每个匹配,包括我的PHP代码和HTML代码。我想使用preg_match_all在文本文件中搜索,然后预测所有匹配,并一次回显/返回每个,一个div(有三个模式)。 (我尝试了几种不同的方法,但结果却得到了一个数组。)什么代码可以实现这个目标?
答案 0 :(得分:0)
您可以使用以下方式提取数据:
$matches = array();
preg_match_all("/([0-9]+) \(([a-zA-Z-]+)\) ([\d]+)/", $text, $matches);
示例,在文字上:
$text = "5 (blah-blah) 001 \n 6 (bloh-bloh) 002";
结果将是:
Array
(
[0] => Array
(
[0] => 5 (blah-blah) 001
[1] => 6 (bloh-bloh) 002
)
[1] => Array
(
[0] => 5
[1] => 6
)
[2] => Array
(
[0] => blah-blah
[1] => bloh-bloh
)
[3] => Array
(
[0] => 001
[1] => 002
)
)
因此,如果您使用file_get_contents
阅读文件内容,则应该可以应用preg_match_all
并检索所有数据。
答案 1 :(得分:0)
<?php
$string = "5 (blah-blah) 001
2 (blah) 006";
$result = preg_match_all("/(\d+)\s+\((.*?)\)\s+(\d+)/", $string, $matches);
if (count($matches) > 0) {
unset($matches[0]);
$sets = array();
foreach ($matches as $key => $value) {
foreach ($value as $key2 => $value2) {
$sets[$key2][] = $value2;
}
}
foreach ($sets as $key => $values) {
echo '<div style="background-color: red;">';
foreach ($values as $ind => $value) {
echo '<p>'.$value.'</p>';
}
echo '</div>';
}
// Direct output (without an internal loop)
foreach ($sets as $key => $values) {
echo '<div style="background-color: orange;">';
echo '<p>'.$values[0].'</p>';
echo '<p>'.$values[1].'</p>';
echo '<p>'.$values[2].'</p>';
echo '</div>';
}
}
?>
现在$sets
将在正确的集合中包含您的值。我添加了一个foreach循环来打印出你想要的数据。