php、preg_match、regex、提取特定文本
我有一个非常大的.txt文件和我们的客户订单,我需要把它移动到一个mysql数据库。然而,我不知道使用什么样的正则表达式,因为信息并没有太大的不同 ----------------------- 4046904 KKKKKKKKKKK Laura Meyer MassMutual Life Insurance 153 Vadnais Street Chicopee, MA 01020 US 413-744-5452 lmeyer@massmutual.co... KKKKKKKKKKK 373074210772222 02/12 6213 NA ----------------------- 4046907 KKKKKKKKKKK Venkat Talladivedula 6105 West 68th Street Tulsa, OK 74131 US 9184472611 venkat.talladivedula... KKKKKKKKKKK 373022121440000 06/11 9344 NA ----------------------- ----------------------- 4046904 KKKKKKKKK 劳拉·迈耶 万通人寿保险 瓦德奈斯街153号 马萨诸塞州奇科佩01020 美国 413-744-5452 lmeyer@massmutual.co... KKKKKKKKK 37307421077222 02/12 6213北美 ----------------------- 4046907 KKKKKKKKK 文卡特塔拉迪韦杜拉酒店 西68街6105号 塔尔萨,好的,74131 美国 9184472611 文卡特,塔拉迪维杜拉。。。 KKKKKKKKK 373022121440000 06/11 9344北美 ----------------------- 我尝试了一些东西,但我甚至无法提取名称。。。这是我的努力的一个例子,但没有成功 $htmlContent = file_get_contents("orders.txt"); //print_r($htmlContent); $pattern = "/KKKKKKKKKKK(.*)\n/s"; preg_match_all($pattern, $htmlContent, $matches); print_r($matches); $name = $matches[1][0]; echo $name; $htmlContent=文件获取内容(“orders.txt”); //打印(HTML内容); $pattern=“/kkk(.*)\n/s”; preg_match_all($pattern,$htmlContent,$matches); 打印(匹配项); $name=$matches[1][0]; echo$name;php、preg_match、regex、提取特定文本,php,regex,preg-match-all,Php,Regex,Preg Match All,我有一个非常大的.txt文件和我们的客户订单,我需要把它移动到一个mysql数据库。然而,我不知道使用什么样的正则表达式,因为信息并没有太大的不同 ----------------------- 4046904 KKKKKKKKKKK Laura Meyer MassMutual Life Insurance 153 Vadnais Street Chicopee, MA 01020 US 413-744-5452 lmeyer@massmutual.co... KKKKKKKKKKK
对于类似的东西,您可能希望避免使用正则表达式。由于数据是按行组织的,因此您可以使用fgets()重复读取行并以这种方式解析数据。您可能希望避免使用类似的正则表达式。由于数据是按行组织的,因此可以使用fgets()重复读取行,并以这种方式解析数据。可以使用regex读取此文件,但创建一个可以读取所有字段的regex可能相当复杂
我建议您逐行读取此文件,并分析每个文件,检测其中包含的数据类型。您可以使用正则表达式读取此文件,但创建一个可以读取所有字段的正则表达式可能会非常复杂
我建议您逐行阅读此文件,并对每个文件进行解析,检测其中包含的数据类型。既然您确切地知道数据所在的位置(即它位于哪一行),为什么不这样做呢 i、 例如
$htmlContent = file_get_contents("orders.txt");
$arrayofclients = explode("-----------------------",$htmlContent);
$newlinesep = "\r\n";
for($i = 0;i < count($arrayofclients);$i++)
{
$temp = explode($newlinesep,$arrayofclients[i]);
$idnum = $temp[0];
$name = $temp[4];
$houseandstreet = $temp[6];
//etc
}
你可以使用正则表达式,但在这种情况下它们有点笨拙
Nico既然您确切地知道数据的位置(即数据在哪一行上),为什么不这样做呢 i、 例如
$htmlContent = file_get_contents("orders.txt");
$arrayofclients = explode("-----------------------",$htmlContent);
$newlinesep = "\r\n";
for($i = 0;i < count($arrayofclients);$i++)
{
$temp = explode($newlinesep,$arrayofclients[i]);
$idnum = $temp[0];
$name = $temp[4];
$houseandstreet = $temp[6];
//etc
}
你可以使用正则表达式,但在这种情况下它们有点笨拙
Nico记录在案,这里是将为您捕获名称的正则表达式。(速度很可能是个问题。)
为了记录在案,这里是将为您捕获名称的正则表达式。(速度很可能是个问题。)
附议。这看起来更像是针对
fgets()
或file()
的作业,然后遍历每一行以提取单个记录。这看起来更像是fgets()
或file()
的作业,然后遍历每一行以提取单个记录。
(?<=K{10}\s{2})\K[^\r\n]++(?!\s{2}-)
(?<=K{10}\s{2}) #Positive lookbehind for KKKKKKKKKK then 2 return/newline characters
\K[^\r\n]++ #Greedily match 1 or more non-return/newline characters
(?!\s{2}-) #Negative lookahead for return/newline character then dash
if(preg_match_all("/(?<=K{10}\s{2})\K[^\r\n]++(?!\s{2}-)/",$htmlContent,$matches)){
var_export($matches[0]);
}else{
echo "no matches";
}
array (
0 => 'Laura Meyer',
1 => 'Venkat Talladivedula',
)