drhzc64482 2012-08-24 10:13
浏览 67
已采纳

PHP和正则表达式

I've currently got an issue.

I'm attempting to format a block of text using regular expressions, and I'll explain what I've got so far and then I'll go on to explain my problem.

I have a text file, with some narrative text.

VOLUME I



CHAPTER I


Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
when an unknown printer took a galley of type and scrambled it to make a type 

It was popularised in the 1960s with the release of Letraset sheets containing 
Lorem Ipsum passages, and more recently with desktop publishing software like 
Aldus PageMaker including versions of Lorem Ipsum.


VOLUME II



CHAPTER II


Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
It has survived not only five centuries, but also the leap into electronic 
typesetting, remaining essentially unchanged. 

It was popularised in the 1960s with the release of Letraset sheets 
containing Lorem Ipsum passages, and more recently with desktop 
publishing software like Aldus PageMaker including versions of Lorem Ipsum.

...
...

It has multiple VOLUMES and CHAPTERS, and needs to be formatted by PHP to look like it does in the text file, with appropriate spacing.

First, I call this formatting function to handle some whitespacing and cleanup.

<?php    
function formatting($AStr)
{
    return preg_split('/[
]{2,}/', trim($AStr));        
}    
?>

Then, I call the file and continue attempting to format.

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
<body>

<h1>Jane Austen</h1>

<h2>Emma</h2>

<?php

require_once 'format.inc.php';

$p = file_get_contents('emma.txt');

$p = formatting($p);

/*
foreach ($p as $l) {
    $l = trim($l);
    preg_replace('/(VOLUME +[IVX]+)/', "jjj", $l);
    $volumePattern = '/(VOLUME +[IVX]+)/';
    $chaperPattern = '/(CHAPTER +[IVX]+)/';
    $l = str_replace("
", ' ', $l);

    if (preg_match('/(VOLUME +[IVX]+)/', $l, $m)) {
        echo '<h3>' . $m[1] . '</h3>';
    }
    if (preg_match('/(CHAPTER +[IVX]+)/', $l, $m)) {
        echo '<h3>' . $m[1] . '</h3>';
    }
    preg_replace('/(VOLUME +[IVX]+)/', "jjj", $l);
    echo $l . "
";
}*/

foreach ($p as $l) {
    //$l = trim($l);
    //$l = str_replace("[
]", '
', $l);
    if (preg_match('/[\.\w]/', $l, $m)) {
        echo "
";
    }
    if (preg_match('/(VOLUME +[IVX]+)/', $l, $m)) {
        echo '<h3>' . $m[1] . '</h3>';
    }
    $l = preg_replace('/(VOLUME +[IVX]+)/', '', $l);
    if (preg_match('/(CHAPTER +[IVX]+)/', $l, $m)) {
        echo '<h3>' . $m[1] . '</h3>';
    }
    $l = preg_replace('/(CHAPTER +[IVX]+)/', '', $l);
    echo $l . "
";
}


?>

</body>
</html>

The issue is, that I can't get the whitespace (newline) between each paragraph to print. I've tried, but I can't. I tried by using this line:

if (preg_match('/[\.\w]/', $l, $m)) {
            echo "
";
        }
  • 写回答

2条回答 默认 最新

  • duanjian7617 2012-08-24 10:27
    关注

    you have diferrent errors, first in 'formating' function the regexp must be :

    function formatting($AStr)
    {
        return preg_split('/[
    ]{2,}/', trim($AStr));        
    }
    

    after you must know that preg_replace has no variable passed by reference so you must replace your line by the return of the function :

    foreach ($p as $l) {
        $l = trim($l);
        preg_replace('#VOLUME\s+[A-z]+#Ui', "jjj", $l);
        $l = str_replace("
    ", ' ', $l);
        if (preg_match('/(VOLUME +[IVX]+)/', $l, $m)) {
            echo '<h3>' . $m[1] . '</h3>';
        }
        $l = preg_replace('/(VOLUME +[IVX]+)/', '', $l);
        if (preg_match('/(CHAPTER +[IVX]+)/', $l, $m)) {
            echo '<h3>' . $m[1] . '</h3>';
        }
        $l = preg_replace('/(CHAPTER +[IVX]+)/', '', $l);
        echo $l . "
    ";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable