【问题标题】:Regex engine does not have a global filter and not accepting flag正则表达式引擎没有全局过滤器并且不接受标志
【发布时间】:2019-04-27 03:15:42
【问题描述】:

我可以在我用于测试的这个站点上检查“全局”。我取消了全局并尝试将 /g 添加到我的正则表达式中,但它不起作用。我正在尝试手动添加它,因为在实时环境中,正则表达式引擎没有全局过滤器。

我试过 /g 和正则表达式的开始和结束并关闭自动过滤器

(?=(Booked|Cancelled|Reschedule))(?<status>\1)|(?<acct>M\d{9})|(? 
=Procedure Date:\s*(?<m>\d{2})\/(?<d>\d{2})\/(?<y>\d{2}))

如果我从网站上删除修饰符或尝试自己添加它,它会忽略匹配项。这是一个 de o

https://regex101.com/r/igjCuo/48

【问题讨论】:

  • 你使用什么语言?
  • g 标志不是正则表达式引擎的一部分,它只能用于某些语言的正则表达式文字符号中,而不是全部。你的环境是什么?
  • PCRE (PHP) 我在 Summit Scheduler 上使用它,它已经脱离了 PHP。
  • 您好,我认为这是一个全球性问题,因为 (1/4) 匹配项正在返回。似乎它正在被捕获但未显示。我不知道为什么regex101.com/r/igjCuo/53

标签: regex modifier


【解决方案1】:

我不太确定你在问什么,但在 PHP 中你可以使用preg_match_all。它甚至可以与换行符一起使用,因此您不必将它们替换为 {newline}

假设正则表达式是完整的:

<?php
$file = $argv[1];
$rgx="/(?=(Booked|Cancelled|Reschedule))(?<status>\1)|(?<acct>M\d{9})|(?=Procedure Date:\s*(?<m>\d{2})\/(?<d>\d{2})\/(?<y>\d{2}))/";
$fp = fopen($file, "r");
$data = fread($fp, filesize($file));
fclose($fp);
preg_match_all($rgx, $data, $array);
var_dump($array);

我已将代码保存为test.php,并进行如下验证。

$ php test.php txt_newline.txt > test.a
$ php test.php txt_no_newline.txt > test.b
$ md5sum test.a test.b 
5880b9977830066f5b8bd0bea41ebb0f  test.a
5880b9977830066f5b8bd0bea41ebb0f  test.b

我希望它有所帮助。 Here'spreg_match_all 的完整手册。

【讨论】:

  • @imlight 你期望哪个输出?一个文件/字符串/任何内容有多少通知(?)?如果您更详细地描述您的问题,我将能够为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多