Php 解析正则表达式

Php 解析正则表达式,php,regex,ip-address,Php,Regex,Ip Address,我正在进行一个项目,需要将数据库()解析为一个数据库 我需要找出每个成员,所以我需要它来匹配xx之间的所有内容。和\n\nxx。其中x是任何小写字母 以下是文件的几行: ad.andorpac Servei de Telecomunicacions d'Andorra 19960627 194.158.64.0/19 ALLOCATED PA 20050104 85.94.160.0/19 ALLOCATED PA 20061117 91.

我正在进行一个项目,需要将数据库()解析为一个数据库

我需要找出每个成员,所以我需要它来匹配xx之间的所有内容。和\n\nxx。其中x是任何小写字母

以下是文件的几行:

ad.andorpac
    Servei de Telecomunicacions d'Andorra 

    19960627    194.158.64.0/19 ALLOCATED PA
    20050104    85.94.160.0/19  ALLOCATED PA
    20061117    91.187.64.0/19  ALLOCATED PA
    20091124    109.111.96.0/19 ALLOCATED PA
    20120925    185.4.52.0/22   ALLOCATED PA
    20110722    2a02:8060::/31

ae.absl-me
    Asia Broadcast Satellite Ltd (Middle East) 

    20110321    31.47.88.0/21   ALLOCATED PA

ae.adac
    Abu Dhabi Airports Company PJSC 

    20120402    37.218.224.0/21 ALLOCATED PA

我不是正则表达式专家,有人能提供这些表达式吗?

您不需要非常复杂的正则表达式来解析它。您可以按分隔符拆分,然后解析每个条目:

// $string contains the text
$entries = explode("\n\n", $string);
for($i=0; $i < sizeof($entries); $i+=2){
    parse_header($entries[$i]));
    parse_entries($entries[$i+1]);
}
比如:

 preg_match_all("/[a-z]{2}\..*?\n\n[a-z]{2}\./s", $text, $matches)
应该有用

这假设您对问题的描述是准确的!如果不是这样,你可以期待这个正则表达式被证明是非常脆弱的

(即:
\n\n[a-z]{2}\.
出现的不希望出现的情况,您希望在每个匹配中包含下一个条目的前3个字符,两个新行将始终出现在您的记录之间,并且它们将相邻,之间没有任何其他字符,包括任何空格等)

好吧,我猜你并不真的想得到结尾“xx”。作为比赛的一部分,所以另一种选择是对它使用前瞻,比如:

     preg_match_all("/[a-z]{2}\..*?\n\n(?=[a-z]{2}\.)/s", $text, $matches)
 preg_match_all("/[a-z]{2}\..*?\n\n[a-z]{2}\./s", $text, $matches)
     preg_match_all("/[a-z]{2}\..*?\n\n(?=[a-z]{2}\.)/s", $text, $matches)