Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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正则表达式和字符串分段_Php_Arrays_Regex_String - Fatal编程技术网

PHP正则表达式和字符串分段

PHP正则表达式和字符串分段,php,arrays,regex,string,Php,Arrays,Regex,String,所以我要做的是让这个$d数组在现实中,我将从excel单元格中提取值。但是我为这个例子创建了一个数组。数组通知中的每组字符串都有一个“;”在某个地方,有些字符串有“AKA”,有些字符串有“UNKNOWN”。这些字符串是随机的,所以我不确定哪个字符串会出现在excel单元格中。我需要的是在第一个“AKA”之前提取名字和姓氏。还试图提取第一个“;”前面的名字和姓氏。并识别“未知”字符串 我首先应用带$r的preg匹配,以通过“;”进行标识。 接下来,我确定$re22中是否存在“AKA”。 现在我陷入

所以我要做的是让这个$d数组在现实中,我将从excel单元格中提取值。但是我为这个例子创建了一个数组。数组通知中的每组字符串都有一个“;”在某个地方,有些字符串有“AKA”,有些字符串有“UNKNOWN”。这些字符串是随机的,所以我不确定哪个字符串会出现在excel单元格中。我需要的是在第一个“AKA”之前提取名字和姓氏。还试图提取第一个“;”前面的名字和姓氏。并识别“未知”字符串

我首先应用带$r的preg匹配,以通过“;”进行标识。 接下来,我确定$re22中是否存在“AKA”。 现在我陷入困境的是:我知道“AKA”确实存在于2个数组字符串中。现在,我想在我想存储它们之后,在这两个具有“AKA”的数组字符串上应用$r23?我该怎么做

$r = "/(^.*?)(?=;|$)/";
$re22 = "/(AKA)/";
$re24 = "/(UNKNOWN)/";
$r23 = "/(^.*?)(?=AKA|$)/";

$d = ["AMALIAOKLP RETTOMATTIS AKA AMALIAOKLP M RETTOMATTIS; ROSCAR RETTOMATTIS AKA ROSCAR ALBERTO RETTOMATTIS AKA ROSCAR A RETTOMATTIS",
 "IVESS PALM IMPROVEMENT INC; HHJP KGSEING LAANK ASSOCIATION; REWQROYAL MYLLWORK INC; REWAABCO TOOFING INC; UNITED",
"DAVID  SWEREISENSON; RONA  SWEREISENSON; MELLINGTON; TEEGATTA BAY; LATIONAL CITY", "JAMES DECIMA AKA JAMES P DECIMA; GLORIA `enter code here` DECIMA; REARLWOOD ASSOCIATION INC; INC; BORE NA",
"UNKNOWN PARTIES","NATIONAL ASSOCIATION; SAVALENCIA AT INC; ASSEMBLY INC"];

    foreach($d as $x => $x_value) {
  // echo "Key=" . $x . ", Value=" . $x_value;
   echo "BREAK. <br>";
   $q = preg_match($r, $x_value, $matches);
    //echo "Key=" . $x . ", Value=" . $matches;
var_dump($matches[0]);
 echo "BREAK2. <br>";
 //does 'aka' exist in the matches? if so do next
 $q22 = preg_match($re22, $matches[0], $matches22);
    //echo "Key=" . $x . ", Value=" . $matches;
    var_dump($matches22[0]);
 echo "BREAK3.<br>";
 if (in_array('AKA', $matches22, true)) {
    $q25 = preg_match($re23, $matches[0], $matches25);
    var_dump($matches25);
 }
}

您可以使用正则表达式来实现这一点。只要你下定决心,你几乎可以用正则表达式做任何事情。“可以”,而不是“应该”。在这种情况下,为了代码的可读性,我认为您最好使用几个位置良好的调用。也许是这样的:

foreach ($d as $contacts)
{
    /* Split based on semicolons. */
    $contacts = explode('; ', $contacts);
    $primary_contact = $contacts[0];

    $contact_aliases = explode(' AKA ', $contacts[0]);

    if (strpos($contact_aliases[0], 'UNKNOWN') !== FALSE)
        printf("No name found.\n");
    else
        printf("Name: %s\n", $contact_aliases[0]);
}

我会尝试这种方法。在分号上分解,然后在零索引上使用正则表达式,因为您说过您只关心列表中的第一个组

    <?php
$d = array("AMALIAOKLP RETTOMATTIS AKA AMALIAOKLP M RETTOMATTIS; ROSCAR RETTOMATTIS AKA ROSCAR ALBERTO RETTOMATTIS AKA ROSCAR A RETTOMATTIS",
 "IVESS PALM IMPROVEMENT INC; HHJP KGSEING LAANK ASSOCIATION; REWQROYAL MYLLWORK INC; REWAABCO TOOFING INC; UNITED",
"DAVID  SWEREISENSON; RONA  SWEREISENSON; MELLINGTON; TEEGATTA BAY; LATIONAL CITY", "JAMES DECIMA AKA JAMES P DECIMA; GLORIA `enter code here` DECIMA; REARLWOOD ASSOCIATION INC; INC; BORE NA",
"UNKNOWN PARTIES","NATIONAL ASSOCIATION; SAVALENCIA AT INC; ASSEMBLY INC");
foreach($d as $x => $x_value) {
    $split = explode(';', $x_value);
    if(preg_match('~(.*?)\s+(?:AKA|UNKNOWN)~', $split[0], $named)) {
        $store[] = trim($named[1]);
    }
}
print_r($store);

。。。或者可能未知不应在同一组中?

请尝试将其设置为动态数组$matches25[],而不是$matches25。另外,你的preg_匹配有一个拼写错误,应该是$r23;preg_match$re23你能不能只用两个爆炸语句,一个在同一时间爆炸;另一个在AKA,那么你的名字都要分开了阿玛利奥普·雷托马蒂斯和詹姆斯·德西玛这是你唯一希望的两个名字?是的,我在想爆炸在地面上;也会更好。我认为AKA也可能是未知的,所以可能还需要一个正则表达式。哎呀,你说得对。我本来打算实际使用split的正则表达式特性,但后来决定不使用它,并忘了在它的位置上使用explode。
Array
(
    [0] => AMALIAOKLP RETTOMATTIS
    [1] => JAMES DECIMA
)