我在preg_match中的模式不能正常工作

时间:2016-06-24 10:37:55

标签: php regex preg-match

我想得到:

  • 假A3312 + A192389 + B2323 + B948348
  • 假A6712 + A1922389
  • 假为A4512
  • 对于A4552 + B948348是真的 (只有一个Aelement和一个或多个Belement)

我试过了:

print_r(preg_match('/^A((?!\+A).)\+B(.*)$/', $string));

3 个答案:

答案 0 :(得分:2)

所以看起来你所追求的基本模式是“A(数字)+ B(数字)”

你的表达似乎有点过于复杂,我只是使用:

preg_match('/^A\d+(\+B\d+)+$/', $input, $match);

如果输入可以是字母数字(A(alnum)+ B(alnum),请使用

preg_match('/^A[:alnum:]+(\+B[:alnum:]+)+$/', $input, $match);

代替。

基本上,2个绝对硬性要求是:输入字符串应以大写字母A开头,并且应该有一个+符号,后面跟一个大写字母B.无论两者之间的字符是什么,你只需要必须添加最符合您要求的角色组。从您给出\d+(一个或多个数字)的示例似乎符合要求。如果“A00FF33 + B123ABC”应该有效,我会使用[:alnum:][0-9A-F](对于十六进制值)。

一个或多个要求的技巧是为匹配的 + Belement 部分创建一个组,并重复该组一次或多次:

\+B\d+ //matches once
(\+B\d+)+ //matches once or more

答案 1 :(得分:1)

这个正则表达式适合你:

^A\d+\+B\d+(?:\+B\d+)*$

将其用作:

preg_match('/^A\d+\+B\d+(?:\+B\d+)*$/', $string);

这匹配A后跟数字+B后跟数字重复1次或更多次。

  • A4552+B948348匹配,
  • A4552+B948348+B948348+B948348匹配,
  • A3312+A192389+B2323+B948348不匹配

答案 2 :(得分:1)

并且在A / B

之后只有小数
import pandas as pd

df = pd.DataFrame({'feature': feature_names , 'importance': importances})
df.sort_values('importance', ascending=False).set_index('feature').plot.bar(rot=0)