0

私のデータはこんな感じです。

123456  abc1 (aaa: [bbb]aaa)    http://exampleurl.org.uk

654321 cba2 (bbb: aa7)  http://urlexample.org.uk
...

各行を3つの文字列に分割して、配列に配置できるようにします。例えば:

string 1 = 123456   

string 2 = abc1 (aaa: [bbb]aaa)

string 3 = http://exampleurl.org.uk

私の問題は、2番目の文字列が多くの異なる形式で頻繁に変化することです。最初の文字列は常に類似しており、最後の文字列は常にURLです。

編集:これが役立つ場合、2番目の文字列はすべて角かっこ')'で終わることに気づきました。

explode()を使用するつもりでしたが、2番目の文字列を処理する方法がわかりません。何かアドバイス?

4

4 に答える 4

1

正規表現を使用します。

$input = "123456  abc1 (aaa: [bbb]aaa)    http://exampleurl.org.uk";
preg_match("/([0-9]+)\s+(.+)\s+(http:\/\/.*)/i", $input, $matches);

$matchesこれにより、結果がLに保存されます

Array
(
  [0] => 123456  abc1 (aaa: [bbb]aaa)    http://exampleurl.org.uk
  [1] => 123456
  [2] => abc1 (aaa: [bbb]aaa)   
  [3] => http://exampleurl.org.uk
)
于 2013-02-05T21:46:29.183 に答える
1

あなたのフォーマットは実際には非常に単純です:

Number - Space(s) - Random Stuff - Space(s) - URL

したがって、必要なのは次のような正規表現だけです。

^(\d+)\s+(.*?)\s+(URL)$

URLURLマッチング正規表現の好みはどこにありますか。

于 2013-02-05T21:47:01.543 に答える
1

おそらく正規表現を使用するだけですが、これもオプションです。

function parse($str)
{
    $parts = explode(" ", $str);

    // first part of the exploded str
    $number = array_shift($parts);

    // last part of the exploded str
    $url = array_pop($parts);

    // all thats left is the middle str
    $between = trim(implode(" ", $parts), " ");

    return array($number, $between, $url);
}

$str = "123456  abc1 (aaa: [bbb]aaa)    http://exampleurl.org.uk";

print_r(parse($str));

出力:

array (size=3)
  0 => string '123456' (length=6)
  1 => string 'abc1 (aaa: [bbb]aaa)' (length=20)
  2 => string 'http://exampleurl.org.uk' (length=24)
于 2013-02-05T21:51:23.540 に答える
0

$string1の間に常にスペースまたは常にタブが$string2あり、$string3次のようなことができる場合:

$line = '123456  abc1 (aaa: [bbb]aaa)    http://exampleurl.org.uk';
$string1 = substr($line, 0, ($pos = strpos($line, ' '))); // use "\t" instead of ' ' if tab is delimiter
$string2 = trim(substr($line, $pos, ($pos2 = strrpos($line, ' ')) - $pos));
$string3 = substr($line, $pos2 + 1);

これは、正規表現や配列の分解と結合よりもはるかに高速です

于 2013-02-05T21:56:14.953 に答える