Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 寻找正则表达式解决方案_Regex_Perl - Fatal编程技术网

Regex 寻找正则表达式解决方案

Regex 寻找正则表达式解决方案,regex,perl,Regex,Perl,我正在寻找与前两个特定字段(用Perl编写的变量字符串)匹配的正则表达式。在文件中,没有注释的行#以任何字符开头,长度不特定,后跟空白,另一个长度不特定的字符串后跟空白:名称信息数据1数据2数据3 以下仅适用于匹配第二个字段,但我希望前两个字段完全匹配:/^[^#].\s$INFO\s/其中$INFO=“INFO”。我尝试了上述的各种变化,但都无济于事。我的第一次尝试是:/^[^#]$NAME\s$INFO\s/,这对我来说似乎是合乎逻辑的,如果$NAME=“NAME”用于上述记录。虽然我不是正

我正在寻找与前两个特定字段(用Perl编写的变量字符串)匹配的正则表达式。在文件中,没有注释的行
#
以任何字符开头,长度不特定,后跟空白,另一个长度不特定的字符串后跟空白:
名称信息数据1数据2数据3


以下仅适用于匹配第二个字段,但我希望前两个字段完全匹配:
/^[^#].\s$INFO\s/
其中
$INFO=“INFO”
。我尝试了上述的各种变化,但都无济于事。我的第一次尝试是:
/^[^#]$NAME\s$INFO\s/
,这对我来说似乎是合乎逻辑的,如果
$NAME=“NAME”
用于上述记录。

虽然我不是正则表达式专家,但这可能有效(我也不清楚问题的确切细节,所以我做了一些假设):

这将返回一个数组。前两个元素是“字段”,即[0]='$NAME=NAME'和[1]='$DATA=data1'


希望这能有所帮助。并为我的正则表达式向上帝道歉。

虽然我不是正则表达式专家,但这可能有用(我也不清楚问题的确切细节,所以我做了一些假设):

这将返回一个数组。前两个元素是“字段”,即[0]='$NAME=NAME'和[1]='$DATA=data1'

希望这能有所帮助。为我的正则表达式向上帝道歉

我的第一次尝试是:/^[^#]$NAME\s$INFO\s/

这不起作用,因为(从问题中可以看出)
$NAME
前面的字符不是
#
就是什么都没有。因此,您只需删除第一个
[^#]

哪个将匹配字符串:

"$NAME $INFO <whatever or nothing>"
“$NAME$INFO”
我的第一次尝试是:/^[^#]$NAME\s$INFO\s/

这不起作用,因为(从问题中可以看出)
$NAME
前面的字符不是
#
就是什么都没有。因此,您只需删除第一个
[^#]

哪个将匹配字符串:

"$NAME $INFO <whatever or nothing>"
“$NAME$INFO”

给我们举一个完整字符串的例子,以及您想要从中得到什么。这篇文章中有。“名称信息数据1数据2数据3”我只关心要匹配的“名称”和“信息”,其余的我不关心。但前两个字段将是可变字母字符串。像这样?我很难理解最初的字符串到底是什么\#{0}(\w*)(\w*)\w*\w*\w*所以基本上你需要的是匹配前两个单词,前两个单词前面没有
?这是一个正确的语句。基本上,我运行的是一个perl脚本,它读取一个公共文件,前两个字段表示服务器名称和一个程序实例,我希望根据这两个字段设置一些环境变量,因为这个程序的两个实例可以在同一台服务器上运行,但会有不同的环境,这些环境是其余字段另外,我还可以防止其他服务器在其他服务器的环境中运行相同的脚本。仅仅匹配实例字段(第二个字段)并不能阻止这一点。实例由C/L选项设置,服务器由程序设置。请给我们一个完整字符串的示例,以及您希望从中得到什么。这篇文章中有。“名称信息数据1数据2数据3”我只关心要匹配的“名称”和“信息”,其余的我不关心。但前两个字段将是可变字母字符串。像这样?我很难理解最初的字符串到底是什么\#{0}(\w*)(\w*)\w*\w*\w*所以基本上你需要的是匹配前两个单词,前两个单词前面没有
?这是一个正确的语句。基本上,我运行的是一个perl脚本,它读取一个公共文件,前两个字段表示服务器名称和一个程序实例,我希望根据这两个字段设置一些环境变量,因为这个程序的两个实例可以在同一台服务器上运行,但会有不同的环境,这些环境是其余字段另外,我还可以防止其他服务器在其他服务器的环境中运行相同的脚本。仅仅匹配实例字段(第二个字段)并不能阻止这一点。实例由C/L选项设置,服务器由程序设置。我通过对两个不同的正则表达式使用双重测试解决了这个问题。
if($line=~/^[^#].*\s$INST\s/&&$line=~/^$HOST\s/)
第二个不需要检查注释字符,因为第一个已经检查了。感谢AD7six,当我10年前写这篇文章时,我从那开始,但担心#。在我的例子中,它总是有效的,因为field1是主机名,而#是非法的。我希望管理员能够注释掉一个条目。我现在正在修改代码以使用ssh,看到这一点,我说‘哦,那不对’,但答案太简单了,我想得太多了!我通过对两个不同的正则表达式
if($line=~/^[^#].\s$INST\s/&&$line=~/^$HOST\s/)使用双重测试解决了这个问题。
第二个不需要检查注释字符,因为第一个已经检查了。感谢AD7six,当我10年前写这篇文章时,我从那开始,但担心#。在我的例子中,它总是有效的,因为field1是主机名,而#是非法的。我希望管理员能够注释掉一个条目。我现在正在修改代码以使用ssh,看到这一点,我说‘哦,那不对’,但答案太简单了,我想得太多了!
"$NAME $INFO <whatever or nothing>"