Regex 匹配可选数字字符串的正则表达式

Regex 匹配可选数字字符串的正则表达式,regex,Regex,我试图构建一个正则表达式来匹配字符串,比如 样本: 3232asdfADFF/ew323fdffADF 4243dsafAFDF 232 (total 42) <----p1---->/<---p2-----> <----p3----> P4 但我面临的问题是,如果我从输入中完全删除p4,它就会失败。 即使在数字上也会成功。如果没有空间,当然会失败。你应该有类似于(\d{0,3})$的东西,我想。这应该适合你,我想: [0-9A-Za

我试图构建一个正则表达式来匹配字符串,比如

样本:

3232asdfADFF/ew323fdffADF 4243dsafAFDF 232 (total 42)
<----p1---->/<---p2-----> <----p3----> P4            
但我面临的问题是,如果我从输入中完全删除
p4
,它就会失败。
即使在数字上也会成功。

如果没有空间,当然会失败。你应该有类似于
(\d{0,3})$
的东西,我想。

这应该适合你,我想:

[0-9A-Za-z]{2,12}/[0-9A-Za-z]{3,12}(?: [0-9A-Za-z]{1,12})?(?: \\d{1,3})?$

正如我在评论中提到的,我不确定模式中可能存在/可能不存在什么。但是,根据我的猜测,我得出以下结论:

\w{3,12}\/\w{3,12} (?:\w{0,12} )?\d{0,3}
这将匹配所有内容,直到
(总计42)
。如果您还需要包括这些内容,您可以添加:

(?: \(\w+ \d+\))?
直到图案的末尾。同样,根据我所看到的和我所猜测的,尽最大努力应该是结果。如果这不是你想要的,请给我留言,我可以调整


(另外,为了长度起见,我将
[0-9a-zA-Z]
替换为
\w
。虽然这不是直接的一对一替换,但非常接近。如果需要明确地将其替换为以前的模式,请将
\w
替换回原始类。)

删除最后一个数字字段时,您是否仍有空格字符?关于正则表达式的每个问题:您使用的正则表达式引擎是什么?grep、egrep、perl等等。我有点搞不清楚您正在匹配什么,或者什么可以/不能用于匹配。您正在使用
[a-zA-Z0-9]{0,12}
(这告诉我它是可选的),但需要在后面直接使用硬分词(
\b
)。这不也是可选的吗?
(?: \(\w+ \d+\))?