之間找我有一個字符串,它看起來有點像正則表達式,也就是說
Name: xxx xxx
Company Name: xxx xxx xx
Company Type: xxxx
Tel: xxxx
Email: xxxxxxx
Postcode: xxxxxx
我試圖拔出XXX
我使用preg_match_all這樣做,但正則表達式,我需要是不是我能掌握:(我一直在閱讀各地的網絡各種教程,現在我明白這一切較少。
我相信我可以做類似
找到^姓名:(然後任何數量的字空格等到我到)公司名稱$然後^公司名稱:(然後任何數量的字空格等,直到我到)公司類型$
如果有人可以開始我,也許有一個小的解釋,以幫助我更多地理解事情,比如術語「匹配」,我如何定義什麼是匹配和什麼被忽略,因爲我只想要一個數組中的xxx部分,所以如果我做了^名稱:[a-zA-Z0-9] $將全部是匹配或只是[]中的位。
問候。
編輯:添加我使用的php代碼。
foreach($value as $k => &$v){
if($k == "history_date_created"){
$v = date("D jS M Y @ H:i:s", strtotime($v));
}
if($k == "history_text"){
//Name: xxx xxxx Company Name: xxxx xxxx Company Type: xxxx xxxx Tel: xxxx xxxx Email: xxxx xxxx Postcode: xxxx xxxx To Email: xxxx xxxx Subscription: none
$pattern = "/Name: (.*) Company Name: (.*) Company Type: (.*) Tel: (.*) Email: (.*)/U";
preg_match_all($pattern, $v, $matches, PREG_SET_ORDER);
print_r($matches);
}
}
基本上我已經從數據庫中抽取一排,遺憾的是「history_text」是一個文本字段,在我看來是存儲錯誤的,但我也沒有辦法,現在改變這種做法,需要正則表達式來拉不同的值,history_text字段是由表單創建的,所以「名稱:」「公司名稱:」等將永遠是相同的,每個值都不會並且是用戶輸入的,因此可以是任何內容,包括空白。
編輯我的回答:
沒有註冊防爆需要這就是我到底
foreach($value as $k => &$v){
if($k == "history_date_created"){
$v = date("D jS M Y @ H:i:s", strtotime($v));
}
if($k == "history_text"){
$matches = explode("\n", $v);
foreach($matches as $match){
$boom = explode(":", $match);
$value[$boom[0]] = $boom[1];
}
}
}
你所做的一切確實對我有意義,但不幸的是它只返回空的空數組。我將在上面添加一段我的php代碼。 – 2012-01-03 11:59:10
該模式適用於我使用您在提供正確數組的註釋中提供的字符串。 (雖然它不完整,我會離開添加郵政編碼等給你...)。但是,在XXX部分中不能有換行符,如果您需要添加's'修飾符。 – Zulan 2012-01-03 12:08:03
啊我的錯誤,認爲事情變得最終變得簡單大聲了! 我向你展示了沒有nl2br的php輸出中的字符串,所以對我來說它似乎全部在一行上infact它並不是每個項目都在它自己的行上似乎是 – 2012-01-03 12:36:06