正则表达式逻辑比较简化

标签 regex linux perl

我有多个复杂的逻辑,其中之一是比较 2 个字符串。

$db_string_param1 = 'AA1 AB AC1 AK1 BKK2';

$file_string_param1 = 'AK1B25';

我需要测试 $file_string_param1 是否包含 $db_string_param1 的任何内容(以空格分隔),而不使 $db_string_param1 成为数组。

我想也许使用正则表达式可以做到这一点,但目前我不太擅长使用复杂的正则表达式。

最佳答案

假设您的数据不包含特殊字符,您可以在替换 s/\s/|/g 中使用简单的 |

在下面的正则表达式替换中,我已经处理了特殊字符。

将空格和非单词字符分组。然后 e 标志用于将右侧计算为表达式。然后检查$1是否定义,如果定义则使用|分隔。如果未定义,则意味着 $2 包含特殊字符,以便您可以转义该字符。

$file_string_param1 = 'AK1B25';

$db_string_param1 = 'AA1 AB AC1 AK1 BKK2';

$db_string_param1=~s/(\s)|(\W)/ defined($1) ? "|" : "\\$2" /ge;


$file_string_param1=~m/$db_string_param1/;

print $&,"\n";

关于正则表达式逻辑比较简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642904/

相关文章:

linux - 读取非标准数据结构,Linux 文件列表

java - Thales HSM - Windows cp 1252 成功/Linux UTF-8 失败

perl 'last' 语句和变量范围

regex - 如何使用awk从二进制文件中提取版本号

c++ - char 和 wchar_t 的模板没有给出匹配的成员

通过蓝牙连续传输数据

perl - 读取 Perl 中 shell 脚本的控制台输出

regex - 如何通过第一个 "testing"或 "preview"搜索部分在 Vim 中有效地搜索和替换?

c# - 在 C# 正则表达式中将\r 视为\n

apache - mod_perl 死了吗?