添加中断以将文本格式化为标准块

时间:2011-08-19 21:05:58

标签: regex preg-replace

我正在尝试使用粗体和斜体的正则表达式格式化此文本,因此它看起来像带有中断的标准版本:

原件:

特殊使用许可#2011-0016 605 LITTLE STREET SINGLE FELLILY DWELLING公开听证并考虑建造一个住在不合标准的单一家庭的请求 很多;划为R-2-5 /单身和双人家庭。申请人:Brian Thomas

带休息的标准版:

SPECIAL USE PERMIT #2011-0016
605 LITTLE STREET
SINGLE FAMILY DWELLING
Public hearing and consideration of a request to construct a single family dwelling on a 
substandard lot; zoned R-2-5/Single and Two Family.  Applicant:  Brian Thomas

2 个答案:

答案 0 :(得分:0)

首先,我建议您避免使用<br>,而是选择像<div class="address">...</div>这样的多功能标记。如果您以后决定更改显示或导出数据,这将非常有用。

提取第一个块很容易/^(.+\s\d{4}-\d+)\s+/但是没有简单的方法可以在地址和标题之间进行拆分(“STREET”和“SINGLE”)。我相信你必须建立一个启发式,但要小心测试它。拿一个很好的数据样本。然后为提取块的函数编写一些单元测试:

// with PHPunit.
// You should use @provider for testing on multiple input data
// And an Extract class with methods would be cleaner than functions.
function titleTest() {
    assertEquals(
        array("SPECIAL USE PERMIT #2011-0016", "605 LITTLE STREET..."),
        extractTitle("SPECIAL...")
    );
}
function addressTest() {
    list($title, $rest) = extractTitle("SPECIAL...");
    assertEquals(
        array("605 LITTLE STREET", "SINGLE..."),
        $rest

一旦测试失败,您可以构建函数extractAddress(),直到每个样本成功为止。它可能会结合多种方式,例如:标题值列表/SINGLE|.../,地址列表'end / STREET | DRIVE | ... /

答案 1 :(得分:0)

我认为我有一个非常简单的解决方案。 原始文本可能包含换行符,例如\n \r,您需要在<br>中对其进行转换。 如果我的理论是正确的,你应该能够通过这样做来格式化文本:

str_replace("\n", "<br>", $string);

尝试一下,让我知道它是否有效。