2011-08-19 53 views
1

我想,這樣就是它看起來像標準版與休息,以利用大膽的正則表達式和斜體該文本的格式:添加休息,以文本格式化爲一個標準塊

原文:

特許使用許可#2011-0016 605小街單身家庭住宅公衆聆聽並考慮申請建造一個住在不合標準 地段的家庭;劃爲R-2-5 /單人和兩人家庭。申請人:布賴恩·托馬斯

標準版與斷裂:

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 
+3

您應該能夠根據#號碼找到模式。但是,您需要在正則表達式中指定可能的值可能不同於「單個家庭住所」。你的例子中總是使用大寫字母嗎?沒有這些信息,我不認爲有正則表達式可以提供的解決方案。 – gview

+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|.../

0

地址列表我覺得我有一個非常簡單的解決方案。 原文可能有換行符,如\n \r,您需要將它們轉換爲<br>。 如果我的理論是正確的,你應該能夠通過這樣來格式化文本:

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

試試吧,讓我知道,如果它的工作原理。

相關問題