【问题标题】:REGEX start with two metacharacters正则表达式以两个元字符开头
【发布时间】:2018-12-07 08:58:23
【问题描述】:

我的正则表达式有一个问题。我想搜索以“”开头的字符串段,并且必须包含一个或多个换行符。

$csv = xxxx,xxxx,"segment with

line break",xxxx,"segment with no line break",xxxx;

这是我的正则表达式:

$file = fopen('google.csv', 'r');

$csv = file_get_contents('google.csv');


function matches($matches)
{
    return preg_replace("#\n|\r|\t#", "£", $matches);

}

preg_replace_callback('/,"(?=[^"]*\R)[^"]*"/', 'matches', $csv);

当我删除第一个元字符“,”时,它可以工作,但我对字符串的其余部分有一些问题。当我添加逗号时,我的 REGEX 不起作用。

你能帮帮我吗?

【问题讨论】:

  • 怎么不行? - regex101.com/r/2q5ijI/2
  • 他使用我的 CSV 文件处理所有生成器正则表达式网站,但不使用我的本地服务器...
  • 你试过这样吗? 3v4l.org/ZP8bh
  • 是的,我完全像这样尝试,当我有两个元字符来启动 REGEX 时,该功能不起作用。太奇怪了!
  • 我也尝试使用反斜杠,结果相同

标签: php regex csv


【解决方案1】:

preg_replace 的第三个参数必须是字符串:

preg_replace("#\n|\r|\t#", "£", $matches[0]);
//                                      ^^^

整个代码:

$csv = 'xxxx,xxxx,"segment with

line break",xxxx,"segment with no line break",xxxx';

function matches($matches) {
    return preg_replace("#\n|\r|\t#", "£", $matches[0]);
}

$res = preg_replace_callback('/,"(?=[^"]*\R)[^"]*"/', 'matches', $csv);
echo $res;

输出:

xxxx,xxxx,"segment with££line break",xxxx,"segment with no line break",xxxx

【讨论】:

  • 再次感谢您的帮助!我改了,结果还是一样,逗号有问题
  • @ErwanVillemont:为我工作。 “不工作”是什么意思?结果如何?
  • 我没有结果,当我 print_r 新结果时,它与原始文件相同,他找不到第一个逗号的正则表达式。他在生成器网站上工作,而不是在我的本地服务器上工作。但是没有逗号,我的本地服务器会发现所有结果都以“开头。我不明白
  • 这正是我所拥有的。我更新了 MAMP,结果还是一样
  • @ErwanVillemont:如果有效,请随时将答案标记为已接受,请参阅:stackoverflow.com/help/someone-answers 如果您从不接受任何答案,您将不会从社区获得更多答案,您已经问了 3没有一个被接受。
猜你喜欢
  • 1970-01-01
  • 2011-09-16
  • 2020-12-30
  • 2014-10-28
  • 2013-08-04
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2023-02-02
相关资源
最近更新 更多