Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php、preg_match、regex、提取特定文本_Php_Regex_Preg Match All - Fatal编程技术网

php、preg_match、regex、提取特定文本

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

我有一个非常大的.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;
对于类似的东西,您可能希望避免使用正则表达式。由于数据是按行组织的,因此您可以使用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',
)