2016-11-28 110 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是拖字边界)。