【问题标题】:Preg_match using array?Preg_match 使用数组?
【发布时间】:2011-08-17 21:33:30
【问题描述】:

正确用法是:/,,([,]+)?|^,|,$|\b,\b|\s,/

$comma[0] = '/,,([,]+)?/';  
            $comma[1] = '/^,/';     
            $comma[2] = '/,$/';
            $comma[3] = '/\b,\b/';  
            $comma[4] = '/\s,/';    

$analyst = preg_match($comma, $_POST['analyst']) 
    ? mysql_real_escape_string($_POST['analyst']) : NULL;

我正在尝试从用户输入中检测逗号,每个正则表达式都已正确定义,但我不明白为什么它没有将它们传递到 if 语句中。

编辑:

如果我改变这个:

$analyst = preg_match('test', $_POST['analyst']) 
    ? mysql_real_escape_string($_POST['analyst']) : NULL;

然后它起作用了,这没有任何意义。

【问题讨论】:

  • 尝试阅读文档:php.net/preg_match——当然失败了,它不接受数组。一点也不奇怪或意外。
  • @Erik:人们会感到困惑,因为preg_replace 会。
  • 不,Orbling,人们只是懒得看基本文档:(
  • 一个有用的答案是尝试使用管道。 /,,([,]+)?|^,|,$|\b,\b|\s,|,/
  • 只是出于好奇,您可能会尝试与str_pos( $_POST['analyst'], ',' ) 匹配的东西不够用?

标签: php mysql regex preg-match


【解决方案1】:

preg_match() 不接受数组作为参数,只接受字符串。

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

http://php.net/manual/en/function.preg-match.php

【讨论】:

  • 好了。我只是假设它确实如此。这真是太奇怪了。谢谢
  • 虽然没有解决我的问题,但让我学会了如何使用管道。
【解决方案2】:

preg_match 接受第一个参数作为字符串,并且您正在传递一个数组。

【讨论】:

  • 这有技术原因吗?这对我来说似乎是一个疏忽。
  • @Ryan:看看发布的链接
猜你喜欢
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多