0

私はphpに長い文字列があり、それぞれが異なる文を持つ異なる段落で構成されています(これはほとんど小さな文書です)。関係のない記号や文字を削除して、全体を単語に分割したいと思います。たとえば、コンマ、スペース、改行、ピリオド、感嘆符など、無関係な可能性のあるものをすべて削除して、単語だけで終わるようにします。

たとえば、正規表現と関数を使用するなど、一度にこれを行う簡単な方法はありますか、preg_splitまたは関数を何度も使用する必要がありますか?explodeたとえば、最初にすべての文を取得します(「.」、「! 」など)。次に、「、」やスペースなどを削除して単語を取得します。

explode時間がかかり、可能なすべての文字の一部を誤って省略する可能性があるため、関係のないすべての可能な文字に対して関数を使用したくありません。

より自動化された方法を見つけたいと思います。適切に定義された正規表現が機能する可能性があると思いますが、考えられるすべての文字を指定する必要があり、php で正規表現を記述する方法もわかりません。

それで、あなたは私に何を提案できますか?

4

4 に答える 4

3

句読点などを削除してから、単語を配列に分割しますか?または、文字とスペースだけになるように削除しますか?何を達成しようとしているのか正確にはわかりませんが、次のことが役立つ場合があります。

<?php

$string = "This is a sentence! It has *lots* of #$@king random non-word characters. Wouldn't you like to strip them?";

$words = preg_replace("/[^\w\ _]+/", '', $string); // strip all punctuation characters, news lines, etc.
$words = preg_split("/\s+/", $words); // split by left over spaces

var_dump($words);

いずれにせよ、必要に応じて正規表現を使用してテキストを操作するという一般的な考え方が得られます。私の例には2つの部分があります。このように、「しない」などの単語は、他の回答が示唆しているように2つの単語に分割されません。

于 2012-01-31T23:30:02.270 に答える
1

Unicode と互換性を持たせるには、次のものを使用する必要があります。

preg_split('/\PL+/u', $string, -1, PREG_SPLIT_NO_EMPTY);

文字ではない文字で分割されます。

ここを見て、ユニコード文字のプロパティを確認してください。

于 2012-02-02T09:47:20.737 に答える
0

preg_replace() を使用して、置換するさまざまな文字に一致する正規表現を定義し、それらを置換する置換文字を提供するだけです。

http://php.net/manual/en/function.preg-replace.php

検索する文字については、PHP マニュアルにあるように PHP 配列で定義できます。

于 2012-01-31T23:25:25.923 に答える
0

あなたの答えは正規表現の領域にあり、おそらく正しくするのは非常に難しいでしょう. ほとんどすべての場合にうまく機能するものを取得できますが、例外があります。

これは役立つかもしれません:

http://www.regular-expressions.info/wordboundaries.html

于 2012-01-31T23:26:46.030 に答える