【问题标题】:Detect a string containing pipe and append检测包含管道的字符串并追加
【发布时间】:2021-11-13 21:10:37
【问题描述】:

我正在尝试为 preg_replace 编写正则表达式规则,并且需要将某些内容附加到包含至少一个 | 的子字符串中。并以换行符结束。

$str = '"as das dasd", "asrydasd|artysdad|aksda'; // no trailing "

$find = '/^\"*\|*\n$/s';

$replace = $1.'"';

$result = preg_replace($find, $replace, $str);

【问题讨论】:

  • 您的示例期望的结果是什么?

标签: php regex


【解决方案1】:

在您的模式中,您使用锚来断言字符串的开头。字符串末尾也没有换行符,也没有您在替换中引用的捕获组$1

您的模式当前匹配可选的双引号,然后是可选的管道字符,换行符,然后断言字符串的结尾。 can also match 是一个空字符串,后跟一个换行符。

如果您只想确保字符串以双引号开头并且至少包含一个管道字符:

^"[^|\r\n]*\|.*\n$

Regex demo

查看代码中的注释,如果你想匹配一个封闭的双引号之间的管道直到字符串的末尾:

"[^"|\r\n]*\|[^"\r\n]*$

Regex demo

替换为整个匹配$0"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多