Regex 匹配几个字符串中的一个
我有一个perl脚本,它打开许多文件并搜索特定字符串。我需要的是匹配任何匹配的字符串,然后转到下一个文件,这里是脚本的一部分 我想匹配以下选项之一:Regex 匹配几个字符串中的一个,regex,perl,Regex,Perl,我有一个perl脚本,它打开许多文件并搜索特定字符串。我需要的是匹配任何匹配的字符串,然后转到下一个文件,这里是脚本的一部分 我想匹配以下选项之一: function xyz () { 或 或 或 或 函数abc_xyz_abc(){ 或 函数abc_xyz_abc() { 或 函数ab_cd_ef(){ 或 abc_xyz(){ 或 abc_xyz() { 以下是我的一些代码: if (( $match =~ m/function/)|| ($match =~ /()/) || ($mat
function xyz () {
或
或
或
或
函数abc_xyz_abc(){
或
函数abc_xyz_abc()
{
或
函数ab_cd_ef(){
或
abc_xyz(){
或
abc_xyz()
{
以下是我的一些代码:
if (( $match =~ m/function/)|| ($match =~ /()/) || ($match =~ m/\W+\/()) .......{
print "Matched: File $line\n";
next;
} else {
print "Not found\n";
}
您可以为此编写一个正则表达式
^(函数)??\w+?(\(\)?\n???{
将匹配所有四个
function xyz () {
function xyz ()
{
xyz () {
{
还要确保添加多行m
修饰符
如果您确切地知道要查找哪些排列,您可以将它们存储在数组中,然后使用~~运算符进行检查
#fill this with all permutations
my @match_list = ('function abc() {','other example');
if($test ~~ @match_list) {
print "match!";
}
您可以使用括号来匹配多个备选方案中的一个。如果要匹配正则表达式,您还需要在正则表达式中转义括号。谢谢,但是xyx应该是这样的(\W+)(())吗,因为它可能是不同的字母,所以我将其更改为:if($match=~m/(function)?(\W+)(())?\n???\{){….如果我想在找到mact时退出循环并转到下一个文件,我会使用以下行“return$1 if defined$1它不会退出循环,再次感谢..是的..你是正确的…我只考虑了你的示例..更正了答案Thred谢谢,我认为我使用了你的建议,但它只返回了一些文件,而不是所有的文件,这是由于一些文件有“\ux”函数名为xyz_abc或abc_xyz_abc_xyz,怎么能捕捉到它们?我不确定为什么它对我不起作用,我在演示中尝试了abc_x_abc(),没有匹配项。如果不起作用,请查看完整内容尝试用
[a-z\u]替换\w
if (( $match =~ m/function/)|| ($match =~ /()/) || ($match =~ m/\W+\/()) .......{
print "Matched: File $line\n";
next;
} else {
print "Not found\n";
}
function xyz () {
function xyz ()
{
xyz () {
{
#fill this with all permutations
my @match_list = ('function abc() {','other example');
if($test ~~ @match_list) {
print "match!";
}