bundleId 的正则表达式,最后带有可选的通配符字符 (*)

Regex for bundleId with optional wildcard char (*) at the end

我正在尝试验证 bundleId 的输入值。 bundleId 的有效值必须是用 (.) 分隔的字母数字值。如果我们试图在 bundleId 中添加多个 (.),那么我们可以在最后一个通配符 * 字符。例如,一些正确的包 ID 以 * 结尾。 comm.* comm.myapp.* comm.myapp.myappteam.* 有效。但是包括 * 和字符串将是无效的。例如:comm.myap* 无效。 使用连字符 (-) 字符也是有效的,但在字符串的中间。 例如:comm.myapp-teamcomm.m-app.*co.team.te-app.* 是 bundleId 的一些有效字符串。

我正在尝试使用此正则表达式进行验证:@"^([a-zA-Z0-9]+\.)+([a-zA-Z0-9])|\*"

string pattern = @"^([a-zA-Z0-9]+\.)+([a-zA-Z0-9])";
            string input = "comm.app-team.*";
            Match m = Regex.Match(input, pattern, RegexOptions.IgnoreCase);
            if (m.Success)
                Console.WriteLine("valid bundleId");
            else
                Console.WriteLine("Invalid bundleId");

我希望这个 input = "comm.app.*" 成为有效的包标识符。

您可以将第一部分与作为分隔符的点和一个可选的连字符相匹配。

添加一个可选部分,该部分以点开头并匹配字符 class \.[a-zA-Z0-9]+ 中所列内容的 1 倍以上,并再次添加可选的连字符部分。

最后添加匹配可选.*

您可能会使用:

^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.(?:(?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.)*\*|[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)$

说明

  • ^ 字符串开头
  • [a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\. 匹配字符 a-z 或数字并重复 0+ 次带连字符的部分后跟一个点
  • (?:非捕获组
    • (?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.)*\**
    • 结尾的模式重复 0 次以上
    • |
    • [a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)* 重复字符 a-z 或带有连字符部分的数字 0+ 次
  • )关闭非捕获组
  • $ 字符串结束

Regex demo