0

正規表現の配列があり、テキスト ドキュメントをループして最初のパターンを見つけようとしています。それをキーとして配列に割り当て、次に 2 番目のパターンを見つけて値として割り当てます。パターン 1 に遭遇するたびに、それを常にキーとして割り当て、新しいキーに遭遇するまでパターン 2 のすべての一致がその最初のキーに値として割り当てられるようにします。

テキスト ドキュメントの構造:

Subject: sometext

Email: someemail@email.com

source: www.google.com www.stackoverflow.com www.reddit.com

だから私は式の配列を持っています:

$expressions=array(
                'email'=>'(\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b)',
                'url'=>'([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)'
               );

テキストドキュメントをループしてメールアドレスを照合し、それをキーとして配列に割り当て、それに続くすべての URL を値として割り当てます。上記のテキストへの出力は次のようになります。

array(
  'someemail@email.com' => array (
      0 => 'www.google.com',
      1 => 'www.stackoverflow.com',
      2 => 'www.reddit.com'
    )      
4

2 に答える 2

0

そのようなことをする1つの方法:

$parts = preg_split("/(emailexpr)/",$txt,-1,PREG_SPLIT_DELIM_CAPTURE);

$res = array();

// note: $parts[0] will be everything preceding the first emailexpr match
for ( $i=1; isset($parts[$i]); $i+=2 )
{
    $email = $parts[$i];
    $chunk = $parts[$i+1];
    if ( preg_match_all("/domainexpr/",$chunk,$match) )
    {
        $res[$email] = $match[0];
    }
}

正規表現のジブリッシュと交換emailexprしてください。domainexpr

于 2010-07-28T13:30:51.297 に答える
0

私はするだろう:

$lines = file('input_file', FILE_SKIP_EMPTY_LINES);
$array = array();
foreach($lines as $line) {
  if(preg_match('/^Subject:/', $line) {
    $email = '';
  } elseif(preg_match('/^Email: (.*)$/', $line, $m)) {
    if(preg_match($expressions['email'], $m[1])) {
      $email = $m[1];
    }
  } elseif(preg_match('/^source: (.*)$/', $line, $m) && $email) {
    foreach(explode(' ', $m[1]) as $url) {
      if(preg_match($expressions['url'], $url)) {
        $array[$email][] = $url;
      }
    }
  }
}
于 2010-07-28T13:49:20.470 に答える