2016-11-28 159 views
1

我很抱歉,我知道這是一個簡單的問題,這在這裏不合適,但我在regex中很糟糕。正則表達式匹配數字後跟特定字符

我使用preg_match與(數字A)的圖案以與子

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; 其實A應該跟一個空格或句號或換行符)

我的問題是應用OR條件匹配可能存在或不具有一個匹配的字符將被替換爲

$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

我可以建議

'~\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是拖字邊界)。