2016-11-28 15 views
1

これは簡単な質問ですが、ここでは適切ではありませんが、regexではひどいです。 Iは、以下に一致するように(数A)のパターンでpreg_matchを使用数字の後ろに特定の文字が続く正規表現

は数字は数字は小数点できる文字か

  • から分離することができるストリング

    2A -> <i>2A</i> 
    100 A -> <i>100 A</i> 
    84.55A -> <i>84.55A</i> 
    92.1 A -> <i>92.1 A</i> 
    
    • と置き換え
    • 文字を募集してはならない(4 All;実際にはに続けて と入力してください)。

    私の問題は、シングルマッチが

    $str = preg_replace($pattern, '<i>$1</i>', $str); 
    
  • +0

    したがって、 '2A、100 A、84.55A、92.1 A 'の出力はどのくらいですか? –

    +0

    @WiktorStribiżew私は一致を 'italic'にしたいと思っています。 – Googlebot

    +2

    ['\ b \ d * \?\ d + \ s * A \ b'](https://regex101.com/r/MjO7ql/1)を参照してください。 –

    答えて

    2

    として交換する必要があるために存在してもしなくてもよいの文字に一致するようにOR条件を適用することです私は

    '~\b(?<![\d.])\d*\.?\d+\s*A\b~' 
    

    参照を提案することができますregex demo'<i>$0</i>'に置き換えてください。ここで、$0は完全一致の逆参照です。

    詳細

    • \bからword boundary
    • (?<![\d.])をリード - 現在の位置(注前ドットまたは数字がある場合に一致を失敗negative lookbehind:これは、33.333.4444 Aと一致回避するために添加されるが
    • \d*\.?\d+ - 通常の単純化されたfloat/int値の正規表現(0+桁、オプションの.および1+桁S)(注:このため、より洗練された正規表現が必要な場合は、Matching Floating Point Numbers with a Regular Expressionを参照してください)
    • \s* - 0+空白
    • A\b - 単語全体Aは(ここでは、\b)が末尾のワード境界です。
    関連する問題