Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 - Fatal编程技术网

Regex 正则表达式可选匹配

Regex 正则表达式可选匹配,regex,Regex,我有一个我自己制作的正则表达式模式(我是一个noob,通过以下教程制作): 我试着匹配以下句子: ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2 二∏ΡΝΜΜΜ∑∑∑ΜΜΜΦ)-Μ∑ΡΚΚ∑∑∑ Ε∑∑∑∑∏∧∧∧ΗΡΡΡΡΡΡΡ(ΑΜΦ)-Β∧∧ΓΝΝΔ∑ 等等 此模式将字符串拆分为4个部分 例如,对于字符串: ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2 第一场比赛是∏ΡΡΡΜΜΛ∑ΚΟ∑ΕΡΜ∑ΑΔΑΚΥΥΥ(受试者姓名) 第二场比赛是:Ε2(班) 第三场比赛是:Ε。Β。Δ。(房间) 第

我有一个我自己制作的正则表达式模式(我是一个noob,通过以下教程制作):

我试着匹配以下句子:

ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2

二∏ΡΝΜΜΜ∑∑∑ΜΜΜΦ)-Μ∑ΡΚΚ∑∑∑

Ε∑∑∑∑∏∧∧∧ΗΡΡΡΡΡΡΡ(ΑΜΦ)-Β∧∧ΓΝΝΔ∑

等等

此模式将字符串拆分为4个部分

例如,对于字符串:

ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2

第一场比赛是∏ΡΡΡΜΜΛ∑ΚΟ∑ΕΡΜ∑ΑΔΑΚΥΥΥ(受试者姓名)

第二场比赛是:Ε2(班)

第三场比赛是:Ε。Β。Δ。(房间)

第四场比赛是:ΔΗΜΗΡΡΡΥ(老师)
现在在一些条目中,
E*/Θ
没有定义,我想得到3个不带
E*/Θ
的匹配项。我应该如何修改我的模式,使
(Ε[0-9\p{希腊语}]+|Θ)
是可选的匹配


到目前为止,我尝试了
,但因为在我以前的匹配中,我定义了
\s
\s
,它需要2个空格才能获得3个匹配,而我的字符串中只有一个空格。

您可以使用以下内容:

(E[0-9\p{Greek}]+|0)?

整个组都是可选的(?)

您可以使用以下内容:

(E[0-9\p{Greek}]+|0)?

整个小组都是可选的(?)

我认为你需要做两件事:

  • 使
    *
    懒惰(即
    *?
  • (?:\s(Ε[0-9\p{Greek}]+|Θ))?
    包含在非捕获可选组中
正则表达式看起来像

^([a-z0-9\p{Greek}].*?)(?:\s(Ε[0-9\p{Greek}]+|Θ))?\s[\(]([a-z1-9\p{Greek}]+.*)[\)]\s-\s([a-z0-9\p{Greek}]+)$
                    ^^  ^^                       ^

如果您不使第一个
*
变懒,它将吃掉第二个可选组。将其设置为惰性将确保,如果第二个捕获组可以匹配某些文本,则该文本将被“设置”


注意,您调用捕获组匹配,这是错误的。匹配是由整个正则表达式匹配的完整文本,而捕获只是由未替换圆括号中的regexp部分匹配的子字符串。有关详细信息,请参见。

我认为您需要做两件事:

  • 使
    *
    懒惰(即
    *?
  • (?:\s(Ε[0-9\p{Greek}]+|Θ))?
    包含在非捕获可选组中
正则表达式看起来像

^([a-z0-9\p{Greek}].*?)(?:\s(Ε[0-9\p{Greek}]+|Θ))?\s[\(]([a-z1-9\p{Greek}]+.*)[\)]\s-\s([a-z0-9\p{Greek}]+)$
                    ^^  ^^                       ^

如果您不使第一个
*
变懒,它将吃掉第二个可选组。将其设置为惰性将确保,如果第二个捕获组可以匹配某些文本,则该文本将被“设置”


注意,您调用捕获组匹配,这是错误的。匹配是由整个正则表达式匹配的完整文本,而捕获只是由未替换圆括号中的regexp部分匹配的子字符串。请参阅。

设置为
(Ε[0-9\p{Greek}]+|Θ)组有什么问题?你能提供一个例子并解释预期的情况吗?看看。按照向组中添加
标记的相同逻辑,向
\s
标记中添加
,这样这些标记也是可选的?将
设置为
(Ε[0-9\p{Greek}]+|Θ)组有什么错?你能提供一个例子并解释预期的情况吗?看一看。按照向您的组添加
令牌的相同逻辑,向您的
\s
令牌添加
,以便这些令牌也是可选的?