Regex 正则表达式卡住了

Regex 正则表达式卡住了,regex,Regex,我想为以下字符串创建一个正则表达式 abc.xy9.aBBB-hhh7.abcDD_XYz 就是 abc.xy9.aBBB-hhh7.abcDD_XYz 第一个字符必须是小写字母 最后一个字符必须是小写字母/数字 介于[A-Za-z0-9-ⅸ]和 但输入字符串至少包含3个字符,最多63个字符。请检查下面的表达式 abc.xy9.aBBB-hhh7.abcDD_XYz ^((\\.?([a-z]{1})([A-Za-z0-9_-]*)([a-z0-9]{1}))*){3,63}$ 不完

我想为以下字符串创建一个正则表达式

abc.xy9.aBBB-hhh7.abcDD_XYz
就是

abc.xy9.aBBB-hhh7.abcDD_XYz
  • 第一个字符必须是小写字母
  • 最后一个字符必须是小写字母/数字
  • 介于
    [A-Za-z0-9-ⅸ]
但输入字符串至少包含3个字符,最多63个字符。请检查下面的表达式

abc.xy9.aBBB-hhh7.abcDD_XYz
^((\\.?([a-z]{1})([A-Za-z0-9_-]*)([a-z0-9]{1}))*){3,63}$

不完全是。请参见,末尾的
{3,63}
将作为一个整体应用于正则表达式-它将应用整个正则表达式63次。相反,试着把它放在你的内在角色类上。另外,我认为你不希望在开头有句点,你希望在你的角色类中有句点,说
{1}
是多余的

abc.xy9.aBBB-hhh7.abcDD_XYz
^((([a-z])([A-Za-z0-9_-.]{1,61})([a-z0-9])))$

您已经给出了描述:

abc.xy9.aBBB-hhh7.abcDD_XYz
第一个字符是一个小写字母:
[a-z]
最后是一个小字母或数字:
[a-z0-9]
中间:[A-Za-z0-9-389;

abc.xy9.aBBB-hhh7.abcDD_XYz
至少3个字符,最多63个意味着yu必须重复中间正则表达式1到61次

abc.xy9.aBBB-hhh7.abcDD_XYz
一起:

abc.xy9.aBBB-hhh7.abcDD_XYz
[a-z][A-Za-z0-9_.-]{1,61}[a-z0-9]
但是:您需要一些不同于包含字符串的字母和数字的内容。如果没有,则此正则表达式不匹配,例如:

abc.xy9.aBBB-hhh7.abcDD_XYz
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这是因为正则表达式可以找到63'a并声称其匹配

abc.xy9.aBBB-hhh7.abcDD_XYz
^(([a-z][A-Za-z0-9_-]+[a-z0-9]\.)+[A-Za-z0-9_-]*[a-z0-9]|[a-z][A-Za-z0-9_-]+[a-z0-9])$
如果匹配,则检查长度(例如,在PHP中,check preg_match returns>0,然后使用strlen检查总长度)

abc.xy9.aBBB-hhh7.abcDD_XYz

我从你的例子中假设每个组都以小写字母或数字结尾,而不仅仅是整个字符串

的结尾,问题是什么,它与C++相关的是什么?它总是4组还是应该是动态的?你还需要使用捕获组,或者这纯粹是一个验证检查,它的动态但从不超过63个字符,例如:abc.ab9.aBBBt-gga.abb_fff9@SmokeyPHP:是的,它是动态的。但不要超过63个字符示例:abc.aGGGb974BBaa.yUd_gggT7.ab-yt78a如果不需要捕获组,则可以删除此表达式中的所有括号。即使使用圆括号,外部也有两组圆括号,因此可以删除一组圆括号,仍然可以捕获相同的组。此外,还要注意字符类内部的
-
。您当前的表达式是通过。在本例中使用
\-
。我期望的字符串是a“。由每个单词分隔,例如:“abc.ab9.aCCddF9.ayyyqTT\u jj-a”只是迂腐,但您可能希望避开表达式中的最后一个
-
。根据正则表达式的解析方式,它可以解释字符类
9-\
,其中包含类似
[]^
的字符。一些解析器会工作,因为它会忽略9,因为它位于另一个字符组
0-9
,但情况可能并不总是如此。Thx bro“Ingo”用于回复。我在问题中还有一些澄清。就是,;输入字符串abc.xTTTT-jj-a.aHHH7这是我的预期输入字符串,应该对其进行评估,但其长度永远不会超过63个字符。此外,每个单词之间用“.”分隔。我的预期字符串:a“。由每个单词分隔,例如:“abc.ab9.aCCddF9.ayyyqTT_jj-a”我尝试过,但无法理解我的预期行为。你的假设是正确的,a“用“abc.ab9.accdf9.ayyyqTT_jj-a”这样的词分开这个表达对我来说很好-你有什么问题吗?试试aBBBa,它失败的伙伴thx的回复,试试aBBBa。它也失败了这就足够了(([a-z]{1})([a-Za-z0-9})\\\。*),但它在aBBBa中也失败了。a@Rono再次更新!:D
abc.xy9.aBBB-hhh7.abcDD_XYz