2

私はまったく新しいですpreg_replaceが、以下のコードは私の文字列から最後の単語を削除します:

preg_replace('/\W\w+\s*(\W*)$/', '$1', $var);

最後の2つの単語が削除されるように、変更しようとしています。

私が考えることができた唯一のことは、に置き換えることでした$1$2、これはまったく効果がないようで、おそらくただの馬鹿でした:/

問題の文字列は次のようになります。

Lorem ipsum dolor sit amet. Source: LOREM

削除したいSource: LOREM

4

4 に答える 4

8

単純な正規表現は、スペース、任意の数の文字 (またはコロン)、その後のスペース、および文字列の末尾の任意の数の文字に一致する可能性があります。

$str = "Lorem ipsum dolor sit amet. Source: LOREM";
$str = preg_replace( "/\s[a-z:]+\s[a-z]+$/i", "", $str );

// Lorem ipsum dolor sit amet.
echo $str;

分解された式は次のとおりです。

\s       // Single space
[a-z:]+  // Any letter, a to z, or a colon, 1 or more times
\s       // Single space
[a-z]+   // Any letter, a to z, 1 or more times
$        // End of string

デモ: http://codepad.org/G22LnDDY

もう 1 つの方法はexplode、単語の配列を作成し、最後の 2 つを削除するために使用することです。

$str = "Lorem ipsum dolor sit amet. Source: LOREM";
$words = explode( " ", $str );
array_splice( $words, -2 );

// Lorem ipsum dolor sit amet.
echo implode( " ", $words );

デモ: http://codepad.org/6XwqvwuP

于 2012-05-10T20:49:54.343 に答える
1
$str = ' would like to remove Source: LOREM';
$str =  preg_replace('/(.*)\s+([a-zA-Z]+):\s+([a-zA-Z]+)$/', '$1', $str);
echo $str;
于 2012-05-10T21:00:20.167 に答える
1

ここで正規表現を使用する必要はありませんスペースで囲まれたものとして単語を定義すると仮定します。

$words = explode(' ', 'Lorem ipsum dolor sit amet. Source: LOREM');
if (count($words) >= 2) {
    array_pop($words);
    array_pop($words);
}
$words = implode(' ', $words);

または:

$words = explode(' ', 'Lorem ipsum dolor sit amet. Source: LOREM');
if (count($words) >= 2) {
    $words = array_slice($words, 0, count($words) - 2);
}
$words = implode(' ', $words);
于 2012-05-10T20:48:01.067 に答える
0

$1 は、実際には置換用のグループ化されたキャプチャであるため、$n、$n+1 と考えてください。正規表現には、括弧 () のグループが 1 つしかありません。そのため、2 つ目のセットが必要になります。実際に何かを交換する必要がない場合は、より的を絞ったアプローチを使用できます。

.*(?=\s\D+\s)

あなたをもっと近づけるはずです。また、私にとって命の恩人 (本当に時間の節約になります) はhttp://regexpal.com/ です。

于 2012-05-10T20:48:59.443 に答える