Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

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_Splunk - Fatal编程技术网

Regex 使用正则表达式拉动定位的分组和重复字符串?

Regex 使用正则表达式拉动定位的分组和重复字符串?,regex,perl,splunk,Regex,Perl,Splunk,假设我有如下数据输出: 0;根。;0; MLG。;247; 根。;249; MLG。;2390; 烤面包数字;用户名 当数字不是0时,我试图在忽略用户名前面的数字和分号的情况下提取用户名,并且这样做的次数未知。关于该数据,输出应为: root。MLG。烤面包。 语法必须是perl格式。使用它的应用程序不接受任何异常。虽然我可以完全控制这些数据的显示方式(例如,我可以删除数字旁边的分号,将唯一的数字附加到用户名上,并用句点和分号分隔),但我想知道这样做的方法 我尝试过的许多当前正则表达式如下所示

假设我有如下数据输出:

0;根。;0; MLG。;247; 根。;249; MLG。;2390; 烤面包<代码>数字;用户名

当数字不是0时,我试图在忽略用户名前面的数字和分号的情况下提取用户名,并且这样做的次数未知。关于该数据,输出应为:

root。MLG。烤面包。

语法必须是perl格式。使用它的应用程序不接受任何异常。虽然我可以完全控制这些数据的显示方式(例如,我可以删除数字旁边的分号,将唯一的数字附加到用户名上,并用句点和分号分隔),但我想知道这样做的方法

我尝试过的许多当前正则表达式如下所示

(该
(?
是在
结尾后指定regex,以防有人怀疑,应用程序将指定并显示一个字段名)

  • 从显示的第一个数字不是0开始,将所有数据拉至最后一个分号
“(?[1-9].*)”

  • 在第一个非零数实例和分号出现后提取所有数据
“[1-9];(?*)”

  • 在非零数字和分号的第一个实例之后提取所有数据,并输出任何字母数字值,直到下一个“单词”边界
“[1-9];(?\w+\b))”


非常感谢您的帮助。

您可以这样做:

my $s = "0; root.; 0; MLG.; 247; root.; 249; MLG.; 2390; toasty.; ... someNumber; username.;";
#                                          ^--- added
print join " ", $s=~/[1-9]0*; ([^;]+)/g;

您只需要在最终的零之前描述至少一个不是零的数字,并使用不包含分号的适当字符类。

提取零后面的用户名并将其连接起来不是更简单吗?@CasimiretHippolyte从我的解释来看,这是不允许的。跟随零的用户是用户不能显示的。我只关心跟在非零数后面的那些。你的要求很难理解。这是什么意思--“(?是指定结尾后面的正则表达式>要指定的字段名”?你说,“万一有人想知道”--这是你唯一一次提到
(?)
这件事。
是什么意思?我看到你煞费苦心地描述了你的问题,谢谢你,但我不明白--例如,我不明白为什么贴出的答案会失败。我将尝试语法
/[1-9]0*;([^;]+)/g、 
。我确实有疑问,因为上次我和其他人尝试此操作时,应用程序失败,因为它无法识别
1
的含义。幸运的是,这是不正确的。我应该提到
(?)
是必须指定的。我已尝试将正则表达式更改为组名之前和之后,但这根本不提供任何信息。我不知道您想做什么,这有点模糊,但我发布了一个工作代码,您可以在这里测试:我不能将问题说得太具体,因为堆栈溢出用户会忽略我们不在他们的专业范围内。我可以试着让这篇文章更清楚一点,但我觉得我们可以在此基础上进一步发展。
(?
regexstring
需要为与数据匹配的正则表达式指定。您的代码可以工作,但它缺少这部分信息。@Jouster500(1)那么这是什么
(?)
?这是我从未见过的某个正则表达式吗?(2)同样——在
0
之后没有用户,对吗?但在您的问题示例中,您确实在您喜欢的输出中显示了这些用户。(3)在问题中,您严格地说Perl(无论这意味着什么),但现在您说“应用程序失败,因为它无法识别1的含义”.我不明白。
[1-9]
很简单。如果不是这样的话,你能做什么?我再次看到你试图解释,但我不太明白。