0

有没有更优雅的方法来为在逗号分隔的字符串中找到数字的 preg_match 编写正则表达式?

YES = 3 or ,3 or 3, or ,3, (虽然 3 两边没有逗号可能永远不会发生)

NO = 13 或 13,或 ,13 或 ,13,

这是我写的,它似乎工作......

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

3 回答 3

0

您可以使用更通用的模式:

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

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

您可以更严格地只允许白色字符或逗号:

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


注意:如果只是为了测试,你可以用非捕获组替换lookarounds:

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

或者

$pattern = '~(?:^|\s|,)3(?:\s|,|$)~';
于 2013-07-28T18:29:38.437 回答
0

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

为什么不先拆分字符串。用于str_getcsv()将其转换为数组。

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

于 2013-07-28T20:38:01.703 回答
0

在rubular.com上尝试我的解决方案

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

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

它适用于任何字符串

于 2013-07-28T20:23:19.800 回答