1

私は、次の一連の行があるピクルスにいます。

John Smith
John Smith +1
John Smith (drink)
John Smith              (    drink      )         
John Smith, drink
John Smith   ,    drink
John Smith   +1   ,    drink
John Smith +1 (drink)
John Smith +1, drink
John Smith +1 drink

私がする必要があるのは、それらを次のような配列に入れることです

'array' => 
    'name' => 'John Smith',
    'plus' => '',
    'comment' => ''
,
'array' =>
    'name' => 'John Smith',
    'plus' => '+1',
    'comment' => ''
,
'array' => 
    'name' => 'John Smith',
    'plus' => '',
    'comment' => 'drink'

など...ここでGoogleレベルの正規表現が必要なようです。これまでのところ、.txt ファイル全体を\nandforeach行で分解してから and で分解しましspaceたが、混乱の真っ只中にいることに気づきました。だから、誰かがそうする方法についてもっと良いアイデアを持っているなら、私はその知識のために殺すだろう. どんな助けでも大歓迎です。とは、あらゆる種類のことを意味します。

4

2 に答える 2

0

サンプルで動作する道路の別の脆弱な正規表現

$lines = array
(
"John Smith",
"John Smith +1",
"John Smith (drink)",
"John Smith              (    drink      )",
"John Smith, drink",
"John Smith   ,    drink",
"John Smith   +1   ,    drink",
"John Smith +1 (drink)",
"John Smith +1, drink",
"John Smith +1 drink"
);

foreach($lines as $line)
{
    preg_match('/^(?<name>\w+(?:\s+\w+)?)(?:[\s,]+(?<plus>\+\d+))?(?:[\s,\(]+(?<comment>\w+)[\s\)]*)?$/', $line, $matches);
    var_dump($matches);
}
于 2013-03-01T14:19:55.113 に答える
0

サンプル文字列で機能する非常に脆弱なソリューションを紹介しましょう。

^ *+([A-Za-z ]*[A-Za-z]) *+(\+\d+)?+ *+(?|,?+ *+\( *+(.*\S) *\) *|,?+ *+(.*\S) *)?$

名前はキャプチャ グループ 1 に含まれます。番号 (記号を含む) はキャプチャ グループ 2 に含まれます。コメントはキャプチャ グループ 3 に含まれます。

現在、名前にはスペースと英語のアルファベットのみを含めることができると想定されています。

もう 1 つの仮定は、スペース (ASCII 32) のみがスペーシング文字として認識されるということです。

デモ(フラグは無視してください。デモンストレーションのみを目的としています)。

于 2013-03-01T13:58:23.043 に答える