1

以下の正規表現があり、それを 2 つの部分に分割しようとしていますが、常に 2 つの部分があるとは限りません。

セクション レベル: 非常に低い。タイプ: 動物。

以下を使用して文字で分割していますが、文字列で分割し、レベルとタイプを識別して、2 つの別々のデータベース列に返すことができるようにする必要があります。たとえば、文字列をチェックして、「セクション レベル: {text}」に一致するものがあるかどうかを確認する必要があります。それをデータベースのレベル列に挿入し、タイプについても同様に、「タイプ: {テキスト}」の文字列を確認する必要があります。タイプ列に挿入します。

(?<=\:)(.*?)(?=\.)

を使用して最初の部分を取り出すことができましたが(\w*)(.*?)(?=\.)、私の人生ではまだ 2 番目の部分を得ることができません。

4

2 に答える 2

2

次の正規表現はあなたのために働くはずです:

(?=\w)(?:Section\s+Level:\s*([^.]+)\.)?\s*(?:Type:\s*([^.]+)\.)?

Levelとフィールドの両方をTypeオプションのフィールドとして使用します。

ライブデモ: http://www.rubular.com/r/GpSHs69YHy

于 2013-03-29T09:19:55.787 に答える
1

strtok正規表現ではなく、おそらく次のように使用します。

$string = 'Level: Very Low. Type: Animal.';

$parts = array();

for ($s = strtok($string, '.'); $s; $s = strtok('.'))
{

  $array = explode(':', $s);

  $parts[trim($array[0])] = trim($array[1]);

}

print_r($parts);

それはあなたに与えるでしょう:

Array
(
    [Level] => Very Low
    [Type] => Animal
)

利点は、何か他のものを追加したとしてもGender: Male、コードを (あまり) 変更する必要がないことです。

于 2013-03-29T09:14:34.157 に答える