gpt4 book ai didi

PHP 正则表达式 检查两个字符串是否共享两个公共(public)字符

转载 作者:行者123 更新时间:2023-12-03 01:29:29 25 4
gpt4 key购买 nike

我刚刚开始了解正则表达式,但是在进行了大量阅读(并学习了很多知识)之后,我仍然无法找到解决这个问题的好方法。

让我说清楚,我知道使用正则表达式可能可以更好地解决这个特定问题而不是,但为了简洁起见,我只想说我需要使用正则表达式(相信我,我知道有更好的方法来解决这个问题)。

问题就在这里。我得到了一个大文件,每行正好 4 个字符长。

这是一个定义“有效”行的正则表达式:

"/^[AB][CD][EF][GH]$/m" 

在英语中,每行在位置 0 处有 A 或 B,在位置 1 处有 C 或 D,在位置 2 处有 E 或 F,在位置 3 处有 G 或 H。我可以假设每行都是正好 4 个字符长。

我想做的是给定其中一行,匹配包含 2 个或更多常见字符的所有其他行。

下面的示例假设如下:

  1. $line 始终是有效格式
  2. BigFileOfLines.txt 仅包含有效行

示例:

// Matches all other lines in string that share 2 or more characters in common
// with "$line"
function findMatchingLines($line, $subject) {
$regex = "magic regex I'm looking for here";
$matchingLines = array();
preg_match_all($regex, $subject, $matchingLines);
return $matchingLines;
}

// Example Usage
$fileContents = file_get_contents("BigFileOfLines.txt");
$matchingLines = findMatchingLines("ACFG", $fileContents);

/*
* Desired return value (Note: this is an example set, there
* could be more or less than this)
*
* BCEG
* ADFG
* BCFG
* BDFG
*/

我知道工作的一种方法是使用如下所示的正则表达式(以下正则表达式仅适用于“ACFG”:

"/^(?:AC.{2}|.CF.|.{2}FG|A.F.|A.{2}G|.C.G)$/m"

这工作正常,性能可以接受。但令我困扰的是,我必须根据 $line 生成它,我宁愿让它不知 Prop 体参数是什么。此外,如果稍后修改代码以匹配 3 个或更多字符,或者每行的大小从 4 增长到 16,则此解决方案的扩展性会很差。

感觉好像有一些非常简单的事情被我忽略了。似乎这可能是一个重复的问题,但我看过的其他问题似乎都没有真正解决这个特定问题。

提前致谢!

更新:

似乎正则表达式答案的规范是 SO 用户只需发布正则表达式并说“这应该适合您。”

我认为这是一个半途而废的答案。我真的很想理解正则表达式,所以如果您可以在答案中包含对正则表达式原因的彻底(在合理范围内)解释:

  • A.作品
  • B.是最有效的(我认为可以对主题字符串做出足够数量的假设,可以进行相当多的优化)。

当然,如果您给出了有效的答案,并且没有其他人发布*带有*解决方案的答案,我会将其标记为答案:)

更新2:

感谢大家的精彩回复、大量有用的信息,并且很多人都提出了有效的解决方案。我选择了我所做的答案,因为在运行性能测试后,它是最好的解决方案,与其他解决方案的平均运行时间相同。

我赞成这个答案的原因:

  1. 给出的正则表达式为更长的行提供了出色的可扩展性
  2. 正则表达式看起来更简洁,对于像我这样的普通人来说更容易解释。

但是,下面的答案也非常全面地解释了为什么他们的解决方案是最好的。如果您因为想弄清楚这个问题而遇到这个问题,请全部阅读,这对我帮助很大。

最佳答案

为什么不直接使用这个正则表达式$regex = "/.*[$line].*[$line].*/m";

对于您的示例,这会转换为 $regex = "/.*[ACFG].*[ACFG].*/m";

关于PHP 正则表达式 检查两个字符串是否共享两个公共(public)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com