正则表达式匹配数字后跟特定字符

时间:2016-11-28 12:02:21

标签: regex preg-match

我很抱歉,我知道这是一个简单的问题,这在这里不合适,但我在regex中很糟糕。

我使用带有(数字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; 事实上,A后面应该有一个空格或句号或换行符)

我的问题是应用OR条件来匹配可能存在与否的单个匹配的字符

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

1 个答案:

答案 0 :(得分: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+位数)(注意:如果您需要更复杂的正则表达式,请参阅{{ 3}})
  • \s* - 0+ whitespaces
  • A\b - 整个单词A(此处,\b是一个尾随单词边界)。