Regex 正则表达式:这个或那个,或者没有

Regex 正则表达式:这个或那个,或者没有,regex,Regex,我该如何写一个正则表达式来表示“这个或那个,或者以上都没有?” 基本上,我有字符串myapplication,myapplication.exe,和myapplication.app。我如何编写一个匹配所有这些的正则表达式 对于前两个,我将使用myapplication(.exe)?。我可以使用myapplication(.exe)?(.app)?,但这也会匹配不应该匹配的myapplication.exe.app 那些?你就快拿到了 ^myapplication(\.exe|\.app)?$

我该如何写一个正则表达式来表示“这个或那个,或者以上都没有?”

基本上,我有字符串
myapplication
myapplication.exe
,和
myapplication.app
。我如何编写一个匹配所有这些的正则表达式

对于前两个,我将使用
myapplication(.exe)?
。我可以使用
myapplication(.exe)?(.app)?
,但这也会匹配不应该匹配的
myapplication.exe.app

那些?

你就快拿到了

^myapplication(\.exe|\.app)?$
  • 用于“或”
  • 请注意,您需要退出
    ,因为
  • 以确保模式与整个输入匹配

你就快拿到了

^myapplication(\.exe|\.app)?$
  • 用于“或”
  • 请注意,您需要退出
    ,因为
  • 以确保模式与整个输入匹配

匹配
.exe
.app
或不匹配。。。匹配
.exe
.app
或不匹配:

^myapplication\(\.exe\|\.app\|)$
或者,根据您使用的正则表达式的风格:

^myapplication(\.exe|\.app|)$

注意
之间不存在任何内容(也称为空字符串),以匹配
.exe
.app
或任何内容。。。匹配
.exe
.app
或不匹配:

^myapplication\(\.exe\|\.app\|)$
或者,根据您使用的正则表达式的风格:

^myapplication(\.exe|\.app|)$

请注意,

myapplication.exe匹配项和myapplication.exe.app匹配项之间不存在任何内容(也称为空字符串)。模式中没有任何东西可以阻止它同时匹配两个。@codekaizen啊,我想。锚定端点,这就解决了。类似地,它与myapplicationfoobarspameggs匹配,但现在只有当它都是一行时才匹配,这是不清楚的。@codekaizen OP没有明确说明输入是如何传递的。这就是回答正则表达式问题的危险…@bobbybee你是在尝试匹配完整的字符串/行吗?或者从更大的文本体中提取内容?myapplication.exe匹配项和myapplication.exe.app匹配项。模式中没有任何东西可以阻止它同时匹配两个。@codekaizen啊,我想。锚定端点,这就解决了。类似地,它与myapplicationfoobarspameggs匹配,但现在只有当它都是一行时才匹配,这是不清楚的。@codekaizen OP没有明确说明输入是如何传递的。这就是回答正则表达式问题的危险…@bobbybee你是在尝试匹配完整的字符串/行吗?或者从一个更大的文本中提取一些东西?为什么这种方法会比简单地让组成为可选的(如我上面的回答)更可取?我并不是说这种方法本身是无效的,但对我来说它确实不寻常/不理想。@MattBall:我并不是说它一定是可取的(你的方法是完全有效的)。但我觉得这并不奇怪。首先,它更接近问题陈述(“这个或那个或上面没有”)。为什么这种方法会比简单地让组成为可选的(如我上面的回答)更可取?我并不是说这种方法本身是无效的,但对我来说它确实不寻常/不理想。@MattBall:我并不是说它一定是可取的(你的方法是完全有效的)。但我觉得这并不奇怪。一方面,它更符合问题陈述(“这或那或以上都没有”)。