1

文字列の最後の数字の後のテキストを取得し、数字が含まれていない場合は文字列全体を取得しようとしています。

私が思いつくことができる最高の正規表現は次のとおりです。

([^\d\s]*)$

ただし、\s と \d は [[:space:]] ではなく mysql 正規表現でサポートされていないことがわかり、\d が同等かどうかもわかりません。

これは私が達成しようとしていることです:

'1/2 Oz' returns 'Oz'
'2 3/4 Oz' returns 'Oz'
'As needed' returns 'As needed'
4

2 に答える 2

2

これはあなたが必要とする正規表現です:

/^.*?(\d+(?=\D*$)\s*)/

一致したテキストを空の文字列に置き換えるだけです""

PHP コード:

$s = preg_replace('/^.*?(\d+(?=\D*$)\s*)/', '', 'Foo Oz');
//=> Foo Oz

$s = preg_replace('/^.*?(\d+(?=\D*$)\s*)/', '', '1/2 Oz');
//=> Oz

ライブデモ: http://ideone.com/u887D7

于 2013-08-09T18:12:38.337 に答える
2

まず、単純にクラスを避けて、代わりに範囲を使用できます。

[^0-9[:space:]]*$

ただし、数字用のものもあります (実際には非 ASCII 数字が含まれる場合があります)。ドキュメントには、これらのリストがあります。ちなみに、それらはPOSIX ブラケット式と呼ばれます。

[^[:digit:][:space:]]*$

ただし、このアプローチの一般的な問題は、文字列の後半にスペースを許可しないことです ( と の間のスペースAsなどneeded)。それらを取得するには、数字の後の末尾のスペースをキャプチャしないようにします。最初の文字がどちらでもないことを確認してください。スペースでも数字でもない場合、残りの文字列は数字以外と一致します. さらに、すべてをオプションにして、数字で終わる文字列でも機能するようにします.

([^[:digit:][:space:]][^:digit:]*)?$
于 2013-08-09T18:13:11.540 に答える