之间找我有一个字符串,它看起来有点像正则表达式,也就是说
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