我正在尝试使用粗体和斜体的正则表达式格式化此文本,因此它看起来像带有中断的标准版本:
原件:
特殊使用许可#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
答案 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);
尝试一下,让我知道它是否有效。