0

単語がまとまった文字列があり、それらを分離する必要があります。「A」で終わるすべての単語は、おそらく新しい行にあるはずです。

item onea second itema third

また、'A' で終わる単語が、extra や sultana のように実際に 'A' で終わるべきかどうかも確認する必要があります。

item oneasecond itemand an extra item

このウェブサイトhttp://www.morewords.com/ends-with/aの「A」で終わる単語でいっぱいの配列があるので、 preg_replace 関数が必要です。

誰かがここで質問に答えるたびに本当に学んでいるので、皆さんの時間と忍耐に感謝します

4

4 に答える 4

1

次のようなことができます。

// assoc array keyed on words that end with A
$endsWithA = array("sultana" => 1, ...); 

$words = split(' ', $string);

$newString = '';
$finalStrings = array();

foreach ($words AS $w) {    
    // if it ends with a, check to see if it's a real word.
    // if so, end the current string and store it
    if (preg_match("/a$/", $w) && !$endsWithA[$w]) {
        $w = preg_replace("/a$/","", $w);
        $newString .= $w;
        $finalStrings[] = $newString;
        $newString = '';
    }
    else {
        $newString .= $w . ' ';
    }    
}

// Get any remaining newString
if ($newString) $finalStrings[] = trim($newString);

print_r($finalStrings);

テストなどはしていませんが、元の文字列から分割された文字列が取り込まれた配列 $finalStrings が得られます。

更新: コードのいくつかのタイプミスを修正しました。

于 2009-10-07T12:08:54.627 に答える
0

explode()文字列を単語の配列に分離するために、文字列に役立つ可能性があることを考慮してください。

$words = explode(' ', $string);

それらがスペースで区切られている場合。

次に、配列$wordsをループして、それぞれの最後の 'a' をチェックし、必要に応じてトリミングすることができます。

preg_replace()テキスト操作のニーズに対する答えが常に得られるとは限りません。

編集: thenpreg_replaceの各要素に使用する場合$words

foreach ($words as $word) {
    $word = preg_replace('/(\w)a$/', '\1', $word);
}

私はこれを試していないことに注意してください。これが実際に配列を変更するかどうかは今思い出せませんが、正規表現はほぼ正しいはずです。重要な概念はa$、つまり、1 単語の文字列の末尾にある文字 a です。文字列の末尾にある文字 ( ) の後に 'a' が続く場合は、文字だけで置き換える正しい構文だと思います、ここでは非常に遅く、脳が機能していない可能性があります\w

さらに、「a」で終わる約 2900 語のリストは考慮されていません (その中には聞いたこともないものもあります) 。

于 2009-10-07T11:49:11.203 に答える
0

これはpreg_matchの仕事のように思えます。

于 2009-10-07T11:55:37.340 に答える
0

'' の意味がわからず、'A' で終わるすべての単語はおそらく新しい行にあるはずです'. 入力文字列以外に実際の出力を投稿する場合は常に役立ちます。

'a' で終わる単語の後に改行 (1) を付ける必要があるということですか? それとも、「a」で終わる単語の前に改行が必要ですか? または、おそらく 2 つの組み合わせで、'a' で終わる単語を独自の行に配置します (単語の前後に改行を配置します)?

$words = "item onea second itema third";
print_r(preg_split("/\s+(?=\S+a)/i", $words));           // 1
print_r(preg_split("/(?<=a)\s+/i", $words));             // 2
print_r(preg_split("/(?<=a)\s+|\s+(?=\S+a)/i", $words)); // 3
于 2009-10-07T12:05:23.177 に答える