Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我需要验证字符串是否为特定格式…以下是规则 可以包含冒号和/或点。 冒号和点都是可选的 如果指定了冒号和/或点,则冒号/点的左侧必须至少有一个字符,右侧必须至少有一个字符。 如果指定了冒号和点,则冒号必须在点之前 只允许0或1冒号和0或1点 AnyString表示由一个或多个unicode字符组成的字符串,不允许冒号和点冒号以及点字符作为AnyString的一部分。 示例: 可能是 AnyString:AnyString.AnyString AnyString:AnyString AnyStri

我需要验证字符串是否为特定格式…以下是规则

可以包含冒号和/或点。 冒号和点都是可选的 如果指定了冒号和/或点,则冒号/点的左侧必须至少有一个字符,右侧必须至少有一个字符。 如果指定了冒号和点,则冒号必须在点之前 只允许0或1冒号和0或1点 AnyString表示由一个或多个unicode字符组成的字符串,不允许冒号和点冒号以及点字符作为AnyString的一部分。 示例:

可能是

AnyString:AnyString.AnyString
AnyString:AnyString
AnyString.AnyString
AnyString
不可能是

AnyString:.AnyString
AnyString.AnyString:AnyString
AnyString:
AnyString.
:AnyString
.AnyString
我已经尝试了很多不同的组合,但我在正则表达式方面做得不够好,无法得到这个组合

提前谢谢

嗯,看起来是这样的:

它肯定以一个或多个非冒号或点字符开头 然后,它有一个冒号,后跟一个或多个非冒号或点字符 然后,它有一个点,后跟一个或多个非冒号或点字符 如果同时存在冒号加X和点加X部分,则冒号部分必须位于第一位 请注意,当我写上述内容时,您现在编辑的解释中没有一个是存在的,因此它只是基于示例

所以我希望是这样的正则表达式:

^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$
注:

您可能希望将所有这些都放在一个逐字的字符串文字中,以避免必须转义反斜杠,例如

var regex = new Regex(@"^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$");
^匹配字符串的开头

[^.:]将匹配除点或冒号以外的任何字符 +是至少一个的语法 ?:是的语法 \.是一个逃逸点,如。指任何字符 ? 零或一的语法是可选的吗 $匹配字符串的结尾 测试代码:

using System;
using System.Text.RegularExpressions;

class Test
{
    static readonly Regex regex =
        new Regex(@"^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$");

    static void Main()
    {
        AssertValid("AnyString:AnyString.AnyString",
                    "AnyString:AnyString",
                    "AnyString.AnyString",
                    "AnyString");

        AssertInvalid("AnyString:.AnyString",
                      "AnyString.AnyString:AnyString",
                      "AnyString:",
                      "AnyString:..Anystring",
                      "AnyString.",
                      ":AnyString",
                      ".AnyString");
    }

    static void AssertValid(params string[] inputs)
    {
        foreach (var input in inputs)
        {
            if (!regex.IsMatch(input))
            {
                Console.WriteLine("Expected to match but didn't: {0}",
                                  input);
            }
        }
    }

    static void AssertInvalid(params string[] inputs)
    {
        foreach (var input in inputs)
        {
            if (regex.IsMatch(input))
            {
                Console.WriteLine("Expected not to match but did: {0}",
                                  input);
            }
        }
    }
}
嗯,看起来是这样的:

它肯定以一个或多个非冒号或点字符开头 然后,它有一个冒号,后跟一个或多个非冒号或点字符 然后,它有一个点,后跟一个或多个非冒号或点字符 如果同时存在冒号加X和点加X部分,则冒号部分必须位于第一位 请注意,当我写上述内容时,您现在编辑的解释中没有一个是存在的,因此它只是基于示例

所以我希望是这样的正则表达式:

^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$
注:

您可能希望将所有这些都放在一个逐字的字符串文字中,以避免必须转义反斜杠,例如

var regex = new Regex(@"^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$");
^匹配字符串的开头

[^.:]将匹配除点或冒号以外的任何字符 +是至少一个的语法 ?:是的语法 \.是一个逃逸点,如。指任何字符 ? 零或一的语法是可选的吗 $匹配字符串的结尾 测试代码:

using System;
using System.Text.RegularExpressions;

class Test
{
    static readonly Regex regex =
        new Regex(@"^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$");

    static void Main()
    {
        AssertValid("AnyString:AnyString.AnyString",
                    "AnyString:AnyString",
                    "AnyString.AnyString",
                    "AnyString");

        AssertInvalid("AnyString:.AnyString",
                      "AnyString.AnyString:AnyString",
                      "AnyString:",
                      "AnyString:..Anystring",
                      "AnyString.",
                      ":AnyString",
                      ".AnyString");
    }

    static void AssertValid(params string[] inputs)
    {
        foreach (var input in inputs)
        {
            if (!regex.IsMatch(input))
            {
                Console.WriteLine("Expected to match but didn't: {0}",
                                  input);
            }
        }
    }

    static void AssertInvalid(params string[] inputs)
    {
        foreach (var input in inputs)
        {
            if (regex.IsMatch(input))
            {
                Console.WriteLine("Expected not to match but did: {0}",
                                  input);
            }
        }
    }
}
这是一个基本版本:?:[^:.]+:?:[^:.]+\.?[^:.]+。如果您更严格地定义任何字符串,这是可以改进的

你的基本要求看起来有三个部分。零或一个Anystring后跟冒号,然后零或一个Anystring后跟一个点,后跟一个强制Anystring。这反映在正则表达式的结构中

根据我掌握的信息,我认为[^:.]+是一个与Anystring匹配的正则表达式,因为唯一的约束是

它不能是零长度 它不能包含冒号或点,这意味着允许最多一个冒号和一个句点 这是一个基本版本:?:[^:.]+:?:[^:.]+\.?[^:.]+。如果您更严格地定义任何字符串,这是可以改进的

你的基本要求看起来有三个部分。零或一个Anystring后跟冒号,然后零或一个Anystring后跟一个点,后跟一个强制Anystring。这反映在正则表达式的结构中

根据我掌握的信息,我认为[^:.]+是一个与Anystring匹配的正则表达式,因为唯一的约束是

它不能是零长度 它不能包含冒号或点,这意味着允许最多一个冒号和一个句点 怎么样?那个不包括数字。任何字符串都允许包含什么

怎么样?那个不包括数字。允许任何字符串包含什么?

这符合您列出的所有条件:

^[^.:]+(:[^.:]+)?(\.[^.:]+)?$
注意,我假设任何字符串都可以是不包含冒号或句点的任何内容。还请注意,我添加了开始/结束线锚点。如果你想的话,你可以移除这些

此正则表达式以人类语言翻译为:

一个或多个非冒号或句号的字符。 (可选)后跟冒号,然后是一个或多个非冒号或句号的字符。 (可选)后跟句号,然后是一个或多个非冒号或句号的字符。 这符合您列出的所有标准:

^[^.:]+(:[^.:]+)?(\.[^.:]+)?$
注意,我假设任何字符串都可以是不包含冒号或句点的任何内容。还请注意,我添加了开始/结束线锚点。如果你想的话,你可以移除这些

此正则表达式以人类语言翻译为:

一个或多个字符 不是冒号或句号的。 (可选)后跟冒号,然后是一个或多个非冒号或句号的字符。 (可选)后跟句号,然后是一个或多个非冒号或句号的字符。 试试这个

(.+):(.+)\.(.+)|(.+)\.(.+)
试试这个

(.+):(.+)\.(.+)|(.+)\.(.+)

如果我们将匹配规则正确地分解为逻辑部分,那么它就非常简单

我将尽可能使用字符串可以包含的最大结构

就是

    TEXT:TEXT.TEXT
我将按如下方式打破这种结构:

    **TEXT**  then  **:CHARACTER**   then   **TEXT**  then **.CHARACTER**     then    **TEXT**
这种分解意味着

    1. your text starts with a letter, then 0 or more series of letters follow
    2. after it can either contain or not contain a colon which is immediately followed by a letter
    3. then again 0 or more series of letter; pay attention here **0 or more**
    4. then it can contain or not contain a dot immediately followed by a letter
    5. then again 0 or more series of letters; pay attention here **0 or more**
在经典正则表达式定义语言中,正则表达式如下所示

    [A..Za..z]+  (:[A..Za..z]){0,1}   [A..Za..z]*   (\.[A..Za..z]){0,1}   [A..Za..z]*
为了便于阅读,我已将定义上述第1点至第5点的部分分开。 在实际使用中,正则表达式中不应该有空格

希望这能有所帮助


干杯。

如果我们正确地将比赛规则分解为逻辑部分,那么你的比赛规则非常简单

我将尽可能使用字符串可以包含的最大结构

就是

    TEXT:TEXT.TEXT
我将按如下方式打破这种结构:

    **TEXT**  then  **:CHARACTER**   then   **TEXT**  then **.CHARACTER**     then    **TEXT**
这种分解意味着

    1. your text starts with a letter, then 0 or more series of letters follow
    2. after it can either contain or not contain a colon which is immediately followed by a letter
    3. then again 0 or more series of letter; pay attention here **0 or more**
    4. then it can contain or not contain a dot immediately followed by a letter
    5. then again 0 or more series of letters; pay attention here **0 or more**
在经典正则表达式定义语言中,正则表达式如下所示

    [A..Za..z]+  (:[A..Za..z]){0,1}   [A..Za..z]*   (\.[A..Za..z]){0,1}   [A..Za..z]*
为了便于阅读,我已将定义上述第1点至第5点的部分分开。 在实际使用中,正则表达式中不应该有空格

希望这能有所帮助



干杯。

请同时发布您尝试的组合。是否有任何字符串表示常量?以.+开头?和[^::]+/[^.]+作为任何[非空]字符串的构造;这些应该会让你走上正轨。这里是你没有给出任何规则的规则,您刚刚给出了与这些规则匹配或不匹配的示例。哎呀……我打赌我尝试了30或更多次……让我回去看看是否能找到最接近的那些。@Gene S:只显示它们可能会得到如下答案:AnyString:AnyString\.AnyString | AnyString\.AnyString | AnyString-它是一个正则表达式,可以匹配您输入的所有3行想要匹配,请同时发布您尝试过的组合。是否有任何字符串表示常量?以.+开头?和[^::]+/[^.]+作为任何[非空]字符串的构造;这些应该会让你走上正轨。这里是你没有给出任何规则的规则,您刚刚给出了与这些规则匹配或不匹配的示例。哎呀……我打赌我尝试了30或更多次……让我回去看看是否能找到最接近的那些。@Gene S:只显示它们可能会得到如下答案:AnyString:AnyString\.AnyString | AnyString\.AnyString | AnyString-它是一个正则表达式,可以匹配您输入的所有3行希望它匹配难道这不允许像AnyString:AnyString这样的东西,它在can-be组中不存在吗?另一项:如果它同时有冒号和点,那么冒号应该在前面dot@voithos:是的,我没有注意到。将进行编辑以解释这一点,然后检查是否允许这样做。目前unclear@zerkms:这已经被:\L+组必须在\.\L+组之前的事实所覆盖。@zerkms:我假设它在it上是隐式的:这不也允许像AnyString:AnyString这样的东西吗,can-be组中不存在哪一项?另一项:如果它同时有冒号和点,则冒号应在前面dot@voithos:是的,我没有注意到。将进行编辑以解释这一点,然后检查是否允许这样做。目前unclear@zerkms:这已经被:\L+组必须在\.\L+组之前的事实所覆盖。@zerkms:我假设它是隐式的,然后:您需要转义中间点,这与任何内容都不匹配:Anything这不允许任何字符串。更糟糕的是,它将允许AnyString::AnyString和其他坏消息inputs@CoDeR你的链接显示它不适用于cvasdvasvasv,根据OP的标准,这应该是允许的。你需要转义中间点,这与任何内容都不匹配:AnythingThis不允许任何字符串。更糟糕的是,它将允许AnyString::AnyString和其他坏消息inputs@CoDeR您的链接表明它不适用于cvasdvasvasv,根据OP的标准,这应该是允许的。您的分号不应该是冒号吗?您的分号不应该是冒号吗?