我有多个复杂的逻辑,其中之一是比较 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/