regex在考虑单词前面出现的空格时对特定单词进行grep
我正在寻找考虑到间距问题的正则表达式。我有代码来执行以下操作: 如果类是从base_类扩展而来的,那么只需将当前类名推送到数组中,否则将grep作为扩展类名,同时将扩展类名和当前类名推送到数组中regex在考虑单词前面出现的空格时对特定单词进行grep,regex,perl,Regex,Perl,我正在寻找考虑到间距问题的正则表达式。我有代码来执行以下操作: 如果类是从base_类扩展而来的,那么只需将当前类名推送到数组中,否则将grep作为扩展类名,同时将扩展类名和当前类名推送到数组中 my $key = "class " . $current_class_name . " extends"; my $variable1 = "extends base_class"; if(/$key/){ if(/($variable1)/){
my $key = "class " . $current_class_name . " extends";
my $variable1 = "extends base_class";
if(/$key/){
if(/($variable1)/){ # Checking if it extends from "base_class"
push @test_list, $current_class_name ; # Pushing the test name if it extends from "base_class"
}
else { # If it doesn't extend from "base_class"
/.extends[\s]+([A-Za-z_0-9]+)/ ;
push @test_list, $1; # Pushing the extended test name into array
push @test_list, $current_class_name; # Pushing the current test name into array
}
}
我有两个问题。
1)当字符串$ $的GRIP(<代码>如果(/$密钥/)< /代码>)如何考虑间隔问题,即如果我们有<代码>类$ CurrutyCub类名称扩展表示字符串class
和$current\u class\u name
之间有许多空格,同样地,$current\u class\u name
和扩展之间也有许多空格。如果我们观察代码的第一行,我们可以看到它认为这些字符串之间只有一个空格。但我想处理任意数量空间的情况。(最多1个空间到10个空间)。
所以,请帮我处理这个问题
2) 类似地,当我们在这些代码行中使用extends后面的单词时:
/.extends[\s]+([A-Za-z_0-9]+)/ ;
push @test_list, $1;
如果扩展类名出现在extends
字符串后面的许多空格之后,我如何接受并推送该单词
我希望我的解释清楚。如果我的问题的任何部分不清楚,请发表评论。我会相应地编辑它
谢谢1)要匹配空白,您应该使用\s
(它将匹配空格或制表符),然后您可以使用量词来控制要匹配的数量
下面的示例允许$key匹配类名周围的任意数量的空格(但必须至少有一个空格):
my$key=“class\s+”$当前\u类\u名称。“\s+扩展”代码>
2) 我认为你的代码是正确的,但也许我误解了这个问题。是否仅当空间超过1个时才要推动它?如果是这样的话,下面的方法就行了:
/.extends\s\s+([A-Za-z_0-9]+)/;
推送@test_list,$1
1)要匹配空白,您应该使用\s
(它将匹配空格或制表符),然后可以使用量词控制要匹配的数量
下面的示例允许$key匹配类名周围的任意数量的空格(但必须至少有一个空格):
my$key=“class\s+”$当前\u类\u名称。“\s+扩展”代码>
2) 我认为你的代码是正确的,但也许我误解了这个问题。是否仅当空间超过1个时才要推动它?如果是这样的话,下面的方法就行了:
/.extends\s\s+([A-Za-z_0-9]+)/;
推送@test_list,$1代码>给您一些建议:
+
匹配上一个字符/组的一次或多次迭代
{}
匹配上一个字符/组的迭代次数。因此,{10}
正好匹配10次迭代
{,}
前一个字符/组的number1
和number2
迭代之间的匹配。因此,{1,10}
匹配1到10次迭代,{2,}
匹配2次或更多次迭代,{1,10}
匹配0到10次迭代
\s
匹配空格,因此制表符和空格
- 我建议尝试字符串插值,因为它是我最喜欢的Perl语言之一。i、 e.
“class$current\u class\u name扩展”
,而不是“class”$当前\u类\u名称。“扩展”
。字符串插值适用于双引号,但不适用于单引号
- 这属于样式,但如果只在一个地方使用,我通常不会创建变量
- 在使用
$1
之前,请始终测试您的正则表达式是否匹配,否则它将是上一次成功正则表达式匹配的结果
例如:
if (/class\s+$current_class_name\s+extends/) {
if (/(extends base_class)/) {
push @test_list, $current_class_name;
}
elsif (/extends\s+([A-Za-z_0-9]+)/) {
push @test_list, $1;
push @test_list, $current_class_name;
}
else {
# not sure what you want to do in this case, looks like it
# would be a syntax error assuming this is Java
}
}
你可以改变
/class\s+$current_class_name\s+extends/
到
如果你想保持1-10的空间限制\s
也与选项卡匹配,因此如果您确实只想接受空格,可以将其更改为
/class[ ]{1,10}$current_class_name[ ]{1,10}extends/
给你一些建议:
+
匹配上一个字符/组的一次或多次迭代
{}
匹配上一个字符/组的迭代次数。因此,{10}
正好匹配10次迭代
{,}
前一个字符/组的number1
和number2
迭代之间的匹配。因此,{1,10}
匹配1到10次迭代,{2,}
匹配2次或更多次迭代,{1,10}
匹配0到10次迭代
\s
匹配空格,因此制表符和空格
- 我建议尝试字符串插值,因为它是我最喜欢的Perl语言之一。i、 e.
“class$current\u class\u name扩展”
,而不是“class”$当前\u类\u名称。“扩展”
。字符串插值适用于双引号,但不适用于单引号
- 这属于样式,但如果只在一个地方使用,我通常不会创建变量
- 在使用
$1
之前,请始终测试您的正则表达式是否匹配,否则它将是上一次成功正则表达式匹配的结果
例如:
if (/class\s+$current_class_name\s+extends/) {
if (/(extends base_class)/) {
push @test_list, $current_class_name;
}
elsif (/extends\s+([A-Za-z_0-9]+)/) {
push @test_list, $1;
push @test_list, $current_class_name;
}
else {
# not sure what you want to do in this case, looks like it
# would be a syntax error assuming this is Java
}
}
你可以改变
/class\s+$current_class_name\s+extends/
到
如果你想保持1-10的空间限制\s
也与选项卡匹配,因此如果您确实只想接受空格,可以将其更改为
/class[ ]{1,10}$current_class_name[ ]{1,10}extends/
这是一个非常清楚和信息丰富的答案。我可以解决我的问题,也可以学习正则表达式。再次感谢。这是一个非常清楚和翔实的答案。我可以解决我的问题,也可以学习正则表达式。再次感谢,谢谢你的回答。它解决了我的问题。是的,如果有超过1个空格,我想按一下。谢谢你的回答。它解决了我的问题。是的,如果有超过1个空间,我想推它。