preg_match以逗号分隔的字符串中的数字

时间:2013-07-28 18:26:01

标签: php regex

是否有更优雅的方法为preg_match编写正则表达式,以逗号分隔的字符串查找数字?

YES = 3或者3或3,或者3,(虽然任何一方都没有逗号的3可能永远不会发生)

NO = 13或13,或13或13,

这是我写的,似乎有用......

preg_match("/(,3,|,3(?!\d)|(?<!\d)3\,)/", $_SESSION['field_list'])

3 个答案:

答案 0 :(得分:0)

您可以使用更一般的模式:

$pattern = '~(?<=^|\D)3(?=\D|$)~';

测试逗号的存在似乎不是很有用,因为你允许所有不是你的示例模式中的数字。

您可以限制性更强,仅允许使用白色字符或逗号:

$pattern = '~(?<=^|\s|,)3(?=\s|,|$)~';


注意:如果仅用于测试,则可以通过非捕获组替换外观:

$pattern = '~(?:^|\D)3(?:\D|$)~';

$pattern = '~(?:^|\s|,)3(?:\s|,|$)~';

答案 1 :(得分:0)

rubular.com

上尝试我的解决方案

/.*?([0-9]+).*?/ims

测试时使用:2,123,4,5 4 or 5 x = 6 / 8

它适用于任何字符串

答案 2 :(得分:0)

我怀疑正则表达式是否适合这项工作。

为什么不先拆分字符串。使用str_getcsv()将其变为数组。

然后您可以简单地查看每个元素以检查它是否为数字。或者检查您所追踪的具体数值。不需要正则表达式。