我有一个表示数据库表的复杂字符串。我需要分别提取数据库表来处理它们。
这是字符串示例:
First table
| | {{Категория}} | | {{Стоимость курсов}} | {{Стоимость учебного набора}} |
| 1 | Взрослый | 1 уровень = 50ч | 1~500 лей | 15 евро |
| 2 | Студент, Мастерант, Докторант | 1 уровень = 50ч | 1~000 лей | 15 евро |
| 3 | Ученик | 1 уровень = 50ч | 1~000 лей | 15 евро |
| 4 | Пенсионер | 1 уровень = 50ч | 1~000 лей | 15 евро |
text text text text text text
Second table:
| | {{Вид курсов}} | | {{Стоимость курсов}}| {{Стоимость учебного набора}} |
| 1 | dfgdfgdfg | 1 модуль | 500 лей | 0 |
|^|^| 2 модуля | 900 лей | 0 |
|^|^| 4 модуля | 1~500 лей | 0 |
| 2 | fgdfgdfg | 12ч | 800 лей | 0 |
| 3 | dfgdfgdfgdfg| 12ч | 900 лей | 0 |
|^|^| Предварительный тест | 400 лей | 0 |
text text text text text text
我尝试使用此regexp:\|.+
但preg_match_all()
只是转储未在数组中分离的所有表。有什么帮助吗?感谢。
答案 0 :(得分:1)
正如我所看到的,你在一个字符串中有一组表。你需要将字符串拆分为表格。我假设你可以用文本拆分字符串,将表分开。
<?php
$s = <<<EOSTR
First table
| | {{Категория}} | | {{Стоимость курсов}} | {{Стоимость учебного набора}} |
| 1 | Взрослый | 1 уровень = 50ч | 1~500 лей | 15 евро |
| 2 | Студент, Мастерант, Докторант | 1 уровень = 50ч | 1~000 лей | 15 евро |
| 3 | Ученик | 1 уровень = 50ч | 1~000 лей | 15 евро |
| 4 | Пенсионер | 1 уровень = 50ч | 1~000 лей | 15 евро |
text text text text text text
Second table:
| | {{Вид курсов}} | | {{Стоимость курсов}}| {{Стоимость учебного набора}} |
| 1 | dfgdfgdfg | 1 модуль | 500 лей | 0 |
|^|^| 2 модуля | 900 лей | 0 |
|^|^| 4 модуля | 1~500 лей | 0 |
| 2 | fgdfgdfg | 12ч | 800 лей | 0 |
| 3 | dfgdfgdfgdfg| 12ч | 900 лей | 0 |
|^|^| Предварительный тест | 400 лей | 0 |
text text text text text text
EOSTR;
$a = null;
$a = preg_split('/^(?:.(?<!\|))*$/xm', $s);
var_dump($a);
就像这里:http://ideone.com/VCt4f(使用this question)。这会给你这个:
array(5) {
[0]=>
string(0) ""
[1]=>
string(506) "
| | {{Категория}} | | {{Стоимость курсов}} | {{Стоимость учебного набора}} |
| 1 | Взрослый | 1 уровень = 50ч | 1~500 лей | 15 евро |
| 2 | Студент, Мастерант, Докторант | 1 уровень = 50ч | 1~000 лей | 15 евро |
| 3 | Ученик | 1 уровень = 50ч | 1~000 лей | 15 евро |
| 4 | Пенсионер | 1 уровень = 50ч | 1~000 лей | 15 евро |
"
[2]=>
string(1) "
"
[3]=>
string(466) "
| | {{Вид курсов}} | | {{Стоимость курсов}}| {{Стоимость учебного набора}} |
| 1 | dfgdfgdfg | 1 модуль | 500 лей | 0 |
|^|^| 2 модуля | 900 лей | 0 |
|^|^| 4 модуля | 1~500 лей | 0 |
| 2 | fgdfgdfg | 12ч | 800 лей | 0 |
| 3 | dfgdfgdfgdfg| 12ч | 900 лей | 0 |
|^|^| Предварительный тест | 400 лей | 0 |
"
[4]=>
string(0) ""
}
当你完成提取表格后,你可以简单地将它们分成
列// $a = preg_split...
foreach ($a as $table) {
if (!strlen(trim($table)))
continue;
$rows = preg_split('/\n/', $table);
foreach ($rows as $row) {
if (!strlen(trim($row)))
continue;
$columns = preg_split('/\|/', $row);
// work with $columns array
}
}
答案 1 :(得分:0)
您可以尝试在“|”上使用explode()功能和“”(空格)并以这种方式解析它。除此之外,我无法想到任何其他方式。
$exploded = explode("|", $table);
$exploded = explode(" ", $table);
答案 2 :(得分:0)
使用两次爆炸和迭代交换正则表达式更简单快捷
$table = array();
$rows = explode("\n", $string);
foreach($rows as $row)
$table[] = explode("|", $row);
现在我们有一个二维数组结构,这样我们就可以像表格一样回显出来,就像这样
echo "<table>";
foreach($table as $row) {
echo "<tr>";
foreach($row as $column)
echo "<td>$column</td>";
echo "</tr>";
}
echo "</table>";