1

文字列の長さを決定するために strlen が使用されることは知っていますが、テキストのブロック全体を検索して、正確に 8 文字の長さの文字列を引き出すことは可能ですか?

4

3 に答える 3

8

以下は、「正確に8文字の長さの文字列」が「単語」を意味すると想定しています。たとえば、次のようなテキストで

$blockOfText = <<< TXT
codepad is an online compiler/interpreter, and a simple collaboration tool.
Paste your code below, and codepad will run it and give you a short URL you 
can use to share it in chat or email. 
TXT;

「コンパイラ」という単語のみを検索します。


非正規表現ソリューション ( demo ):

print_r(
    array_filter(
        str_word_count($blockOfText, 1),
        function($word) { return strlen($word) === 8; }
    )
);

参照:


正規表現ソリューション (デモ):

preg_match_all(
    '(
        \b     # match from a word boundary
        \w{8}  # followed by exactly 8 "word" characters
        \b     # followed by a word boundary
    )x', 
    $blockOfText, 
    $matches
);
print_r($matches[0]);

「単語」文字は、任意の文字、数字、またはアンダースコア文字です。つまり、Perl の「単語」の一部となる任意の文字です。文字と数字の定義は、PCRE の文字テーブルによって制御され、ロケール固有の照合が行われている場合は異なる場合があります。たとえば、"fr" (フランス語) ロケールでは、128 を超える文字コードがアクセント付き文字に使用され、これらは \w によって一致します。

参照:

于 2012-05-24T10:24:52.030 に答える
1

explode()またはを使用preg_split()して文字列を区切り文字で分割し、結果配列を反復処理して を使用しますstrlen()

簡単な例では、長さが 2 のすべてを検索します。

$string = "abcd ab abc abd ad";
$array = explode(' ', $string);
foreach ($array as $part) {
    if (strlen($part) == 2) {
        echo '"' . $part . '" has a length of 2<br />';
    }
}
于 2012-05-24T10:24:28.490 に答える
1
preg_match_all("/\b[a-zA-Z]{8}\b/", $sText, $aMatches);
$aWords = $aMatches[0];

この例も参照してください。

于 2012-05-24T10:27:40.897 に答える