1

次の段落のようなテキストがたくさんありますが、いくつかの例外を除いて、句読点のない単語 ( '",、など)に分割したいと考えています。.newline

当初はインド南部ケララ州のチャラクディ川水系に固有であると考えられていましたが、現在ではペリヤール川、マニマラ川、パンバ川を含む周辺の排水路に広く分布していることが認識されていますが、マニマラのデータはタイプの産地であると思われるため疑わしいかもしれませんP.デニソニの。

アチャンコビル川流域では、P. denisonii と同所的に、時には同所的に発生します。

野生の資源は過去 15 年ほどで 50% も減少した可能性があり、主に水族館取引のための収集が原因であると考えられていますが、生息地は農業や家庭の汚染源、さらに爆発物や有機毒素を含む破壊的な漁法によっても劣化しています。 .

P. denisoniiテキストは、魚の種を指します。の略ですGenus species。この参考書は一言でいいと思います。

したがって、たとえば、これは私が見たい種類の配列です:

Array
(
    ...
    [44] given
    [45] it
    [46] seems
    [47] to
    [48] be
    [49] the
    [50] type
    [51] locality
    [52] of
    [53] P. denisonii
    [54] In
    [55] the
    ...
)

これらの種の参照を区別する唯一のものは、次のP. denisoniiような新しい文と次のend. Newとおりです。

  • P (前述の例の P. のように、Puntius の場合)は 1 文字のみであり、常に大文字です。
  • d (. denisonii など)は、常に小文字またはアポストロフィ ( ')のいずれかです。

preg_splitそのような配列を得るためにどの正規表現を使用できますか? 私は簡単なことを試しましたexplode( " ", $array )が、まったく仕事をしません。

前もって感謝します、

4

1 に答える 1

2

アプローチを変えてください:preg_match_allの代わりにpreg_split? 分割区切り文字でテキストを分割する代わりに、区切り文字を含まないすべての文字列を照合します。

次のような正規表現で使用します:/([\S]+)|(P. denisonii)/すべての空白以外のシーケンスとシーケンス "P. denisonii" を照合します。

カンマ、引用符、ピリオド、およびその他の文字を除外するには、\S を負の正規表現文字リストに置き換えます[^...]

/([^\s,\.\"]+)|(P. denisonii)/\s空白 ( )、コンマ、引用符、およびドット ( \.)を含まないすべてのシーケンスに一致します。

編集:一般的な属名に一致するように(注:引用と偽の属名を含め、コードをより適切にテストするためにテキストを変更しました)

$text = "Initially considered \"endemic\" to the Chalakudy River system in Kerala state, southern India, but now recognised to have a wider distribution in surrounding drainages including the Periyar, Manimala, and Pamba river though the Manimala data may be questionable given it seems to be the type locality of P. denisonii.

This is a bogus genus name, A. testii.

In the Achankovil River basin it occurs sympatrically, and sometimes syntopically, with P. denisonii.

Wild stocks may have dwindled by as much as 50% in the last 15 years or so with collection for the aquarium trade largely held responsible although habitats are also being degraded by pollution from agricultural and domestic sources, plus destructive fishing methods involving explosives or organic toxins.";


preg_match_all("/([A-Z]\. [a-z]+)|([^\s,\.\"]+)/", $text, $matches, PREG_PATTERN_ORDER);

echo "<pre>";
print_r($matches);

注: 選択する配列はであり$matches[0]、ではありません$matches

于 2012-06-16T15:06:14.057 に答える