【问题标题】:What is wrong with these delimiters?这些分隔符有什么问题?
【发布时间】:2013-10-16 16:32:04
【问题描述】:

对于此代码:

{
    $params = explode("/\n/", $params);                 
    $return = array();

    foreach($params as $param) {
        if (preg_match($key, $param)) {
            $return[] = $param;
        }
    }
    return implode("/\n/", $return);
}

我收到“警告:preg_match() [function.preg-match]:分隔符不能是字母数字或反斜杠”

谁能告诉我我缺少什么或需要改变什么?谢谢。

更多信息,这是从:

/**
 * Filter (remove) a parameter from a parameter string
 * @return string Filtered parameter String
 * @param object $params
 * @param object $key
 */
function filterParams($params, $key)
{
    $params = explode("\n", $params);                   
    $return = array();

    foreach($params as $param) {
        if (eregi($key, $param)) {
            $return[] = $param;
        }
    }
    return implode("\n", $return);
}
/**
 * Return the JCE Editor's parameters
 *
 * @return object
*/

因为 PHP 5.3 升级时出现“ereg”错误。根据本网站上的信息,我在其他几个返回错误代码的地方对其进行了更改,并添加了正斜杠,除了这里,错误到处都消失了。让我补充一点,我不是程序员,只是网站管理员。我在这里没有我的元素。

【问题讨论】:

  • $key 中有什么内容?
  • 旁注,explode 不使用正则表达式
  • 也许在这里使用 preg_split("/\n/", $params) 比较合适。
  • 这给了我这个错误:preg_split() 期望参数 2 是字符串,给定数组
  • 现在你的 explode 函数是正确的,因为 $params 是一个字符串。顺便说一句,你能告诉我们关键是什么,这样我们就能准确地看到导致你错误的原因。

标签: php preg-match


【解决方案1】:

ereg-* 函数处理正则表达式的方式与 preg_* 函数处理正则表达式的方式是不同的。基本上,您需要在两端都有一些not alphanumeric or backslash 字符才能使该功能正常工作。

试试这个:

$key = '/' . $key . '/';
// or $key = '#' . $key . '#';
// or $key = '@' . $key . '@';
// etc.

// later
if (preg_match($key, $param)) {
    $return[] = $param;
}

您需要escape that key,但这应该会给您一个开始。

另外,请注意,我认为您的意思不是/\n/。您应该返回\n。区别:第一个匹配这个字符串:

foo/
/bar

而第二个匹配这个字符串

foo
bar

【讨论】:

  • 我试过了,现在我收到一条引用另一个文件的不同错误消息:PHP 错误消息:WARNINGcall_user_func_array() 期望参数 2 是数组,字符串 givenError"
  • 如果我删除前斜线,错误信息会重复大约 100 次。加上前面的斜线,它只会重复两次。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2013-11-06
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多