と私は、次の達成するためにかなり複雑な正規表現を必要とする:すべて一緒複雑な正規表現は、文字列から数字をフィルタリングするが、例外
> replace numbers in a string, i.e. 700, 12.43 by a label (format: {NUMBER:xx})
> ignore: when number is between {braces}, i.e. {7}, {7th}
> ignore: when any character is attached to number, i.e. G3, 7x, 1/2
> except: when
> preceded by $, i.e. $840
> followed by .!?:, i.e. 33! 45.65? 4...
を撮影:
Buy 4 {5} G3 Mac computers for 80% at $600 or 2 for 1/2 price: 200...
dollar. Twice - 2x - as cheap!
所望の出力:
Buy {NUMBER:4} {5} G3 Mac computers for 80% at
$ {NUMBER:600} or {NUMBER:2} for 1/2 price:
{$NUMBER:200} dollar. Twice - 2x - as cheap!
私は今これを持っています:
言い換えればBuy {NUMBER:4} {5} G {NUMBER:3} Mac computers for {NUMBER:80} % at
$ {NUMBER:600} or {NUMBER:2} for {NUMBER:1}/{NUMBER:2} price:
{NUMBER:200} ... dollar. Twice - {NUMBER:2} x - as cheap!
:出力3210
preg_replace("/(?<!{)(?>[0-9]+(?:\.[0-9]+)?)(?!})/", " {NUMBER:$0} ", $string);
無視して、例外がまだ機能していない、と私はそれを正しく実装する方法がわかりません。誰が私を助けてくれますか?
作品GRET、説明のためにありがとう! – Pr0no
@Reveller - 小規模な修正を追加しました:オプションの小数部の一致を所有していました( '(...)?+')か、正規表現は '1.5x'の'あなたが望んでいた、またはあなたは? –
ティム、あなたは正しいです:)それは私が望んでいなかったでしょう。ありがとう! – Pr0no