10

文字列を指定すると、単語を含む文字列の配列が必要になり、それぞれの前に単語以外の文字が続きます。

入力文字列の例:

one "two" (three) -four-

文字列内の単語は、句読点や記号の量に関係なく、意味不明なものであってもかまいません。

私が見たいもの:

配列:
1
 "2
" (三
) -四
-

基本的に、各一致の最後は単語であり、前の一致の残りが先行します。

これをPHPで使用します。"\w"、"\b"、"[^\w]" などの多くのバリエーションを含むパターンで、preg_match_all() と preg_split() のさまざまな組み合わせを試しました。

全体像

検索目的で、文字列内の各単語の後に * を配置するにはどうすればよいですか?

4

4 に答える 4

10

各「単語」の後にアスタリスクを追加したいだけの場合は、次のようにすることができます。

<?php
$test = 'one "two" (three) -four-';

echo preg_replace('/(\w+)/', "$1*", $test);
?>

http://phpfiddle.org/main/code/8nr-bpb

于 2013-02-18T17:53:24.820 に答える
7

次のように、単語の境界で分割するために否定先読みを使用できます。

$array = preg_split( '/(?!\w)\b/', 'one "two" (three) -four-');

Aprint_r( $array); は、必要な正確な出力を提供します。

配列
(
    [0] => 1
    [1] => "2
    [2] => " (3
    [3] => ) -4
    [4] => -
)
于 2013-02-18T17:50:09.253 に答える
0

PHPで正規表現を使用して単語を検索する方法の例を次に示します。

<?php
    $subject = "abcdef";
    $pattern = '/^def/';
    preg_match($pattern, substr($subject, 3), $matches, PREG_OFFSET_CAPTURE);
    print_r($matches);
?>
于 2013-02-18T17:52:54.050 に答える
0

代替案

[^\w]*(\b\w*\b)?
----- ----------
 |        |
 |        |-> Matches a word 0 or 1 time
 |-> Matches 0 to many characters except [a-zA-Z0-9_]

一致する必要があります。

于 2013-02-18T18:00:00.450 に答える