【问题标题】:REGEX - Preg_replace search for dynamic contentREGEX - Preg_replace 搜索动态内容
【发布时间】:2011-10-15 18:00:02
【问题描述】:

我正在制作一个系统,该系统从教育中获取所有可选科目并将其放入数据库中。这工作正常。
现在我想确保如果您选择“财务 A”,则不能选择“财务 C”,我正在尝试使用 preg_replace 执行此操作,因为主题是一个数组。但它一直给我一个错误:

Delimiter must not be alphanumeric or backslash

下面是部分代码:

if
(
    preg_replace("/" + $name_without_level + " (A|B|C)/", "", $andre_fag) 
        == $andre_fag
    || preg_replace("/" + $name_without_level + " (A|B|C)/", "", $andre_fag2)
        == $andre_fag2
){

变量 $name_without_level 给出了没有 A、B 或 C 的主题名称,即级别。

如何修复错误?我已经尝试了所有我能想到的。

【问题讨论】:

  • 您需要在代码中添加错误处理。如果出现错误,您应该向自己展示失败的正则表达式。然后你会看到有什么问题。在任何情况下,您都应该在您的问题中添加$name_without_level 是什么。
  • “这里是一些代码:”是否意味着这不是错误消息中提到的代码行?因为即使您的变量中有一个裸露的/,该 pcre 错误也不会匹配。

标签: php regex preg-replace


【解决方案1】:

想象一下$name_without_level 就是"Finance / Markets"。想象一下你的正则表达式会发生什么。

使用preg_quoteDocs 确保您在字面上寻找正确的字符串,并且不会破坏您的正则表达式:

$pattern = sprintf('/%s (A|B|C)/', preg_quote($name_without_level));
if
(
    preg_replace($pattern, "", $andre_fag) == $andre_fag
    || preg_replace($pattern, "", $andre_fag2) == $andre_fag2
){

这并不意味着这是您对代码的唯一问题。您需要进行错误检查才能真正找到错误。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多