有没有更优雅的方法来为在逗号分隔的字符串中找到数字的 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'])
您可以使用更通用的模式:
$pattern = '~(?<=^|\D)3(?=\D|$)~';
测试逗号的存在似乎不是很有用,因为您在示例模式中允许所有不是数字的东西。
您可以更严格地只允许白色字符或逗号:
$pattern = '~(?<=^|\s|,)3(?=\s|,|$)~';
注意:如果只是为了测试,你可以用非捕获组替换lookarounds:
$pattern = '~(?:^|\D)3(?:\D|$)~';
或者
$pattern = '~(?:^|\s|,)3(?:\s|,|$)~';