如何条件正则表达式

2023-11-23

我想要一个正则表达式,如果它有 3 个实例,它就做一件事.在字符串中,如果它有超过 3 个实例,则为其他内容。

例如

aaa.bbb.ccc.ddd // one part of the regex

aaa.bbb.ccc.ddd.eee // the second part of the regex

我如何实现这一点js or c#?

就像是

?(\.){4} then THIS else THAT

在正则表达式中...

Update

好吧,基本上我正在做的是这样的:

我想切换,对于任何给定的System.Uri,到扩展方法中的另一个子域。

我遇到的问题是我的域通常采用以下形式http://subdomain.domain.TLD.TLD/more/url,但有时,它可能只是http://domain.TLD.TLD/more/url(这只是指向www)

所以这就是我想出的:

public static class UriExtensions
{
    private const string TopLevelDomainRegex = @"(\.[^\.]{2,3}|\.[^\.]{2,3}\.[^\.]{2,3})$";
    private const string UnspecifiedSubdomainRegex = @"^((http[s]?|ftp):\/\/)(()([^:\/\s]+))(:([^\/]*))?((?:\/)?|(?:\/)(((\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?))?$";
    private const string SpecifiedSubdomainRegex = @"^((http[s]?|ftp):\/\/)(([^.:\/\s]*)[\.]([^:\/\s]+))(:([^\/]*))?((?:\/)?|(?:\/)(((\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?))?$";

    public static string AbsolutePathToSubdomain(this Uri uri, string subdomain)
    {
        subdomain = subdomain == "www" ? string.Empty : string.Concat(subdomain, ".");

        var replacement = "$1{0}$5$6".FormatWith(subdomain);

        var spec = Regex.Replace(uri.Authority, TopLevelDomainRegex, string.Empty).Distinct().Count(c => c == '.') != 0;
        return Regex.Replace(uri.AbsoluteUri, spec ? SpecifiedSubdomainRegex : UnspecifiedSubdomainRegex, replacement);
    }
}

基本上用这段代码我采取System.Uri and:

  1. 只取subdomain.domain.TLD.TLD使用Authority财产。
  2. 将其与“伪 TLD”进行匹配(我永远不会拥有一个包含 2-3 个字母的注册域名,这会破坏正则表达式,它基本上会检查以.XX[X] or .XX[X].XX[X])
  3. 我剥离了 TLD,最终得到以下任一结果:domain or subdomain.domain
  4. 如果结果数据有零点,我使用UnspecifiedSubdomainRegex,因为我不知道如何使用SpecifiedSubdomainRegex告诉它如果该部分没有点,它应该返回string.Empty

我的问题是是否有办法将这三个正则表达式合并成更简单的东西

PD:忘记 javascript,我只是用它来动态测试正则表达式


您可以使用(?(?=condition)then|else)构造。然而,这在 JavaScript 中不可用(但在 .NET、Perl 和 PCRE 中可用):

^(?(?=(?:[^.]*\.){3}[^.]*$)aaa|eee)

例如,将检查字符串是否恰好包含三个点,如果是,则尝试匹配aaa在字符串的开头;否则它会尝试匹配eee。所以它将匹配前三个字母

aaa.bbb.ccc.ddd
eee.ddd.ccc.bbb.aaa
eee

但失败了

aaa.bbb.ccc
eee.ddd.ccc.bbb
aaa.bbb.ccc.ddd.eee

解释:

^            # Start of string
(?           # Conditional: If the following lookahead succeeds:
 (?=         #   Positive lookahead - can we match...
  (?:        #     the following group, consisting of
   [^.]*\.   #     0+ non-dots and 1 dot
  ){3}       #     3 times
  [^.]*      #     followed only by non-dots...
  $          #     until end-of-string?
 )           #   End of lookahead
 aaa         # Then try to match aaa
|            # else...
 eee         # try to match eee
)            # End of conditional
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何条件正则表达式 的相关文章

  • 使用sqlbulkcopy之前如何创建表

    我有一个 DBF 文件 我正在尝试导入该文件 然后将其写入 SQL 表 我遇到的问题是 如果我使用 SqlBulkCopy 它需要我提前创建表 但在我的场景中这是不可能的 因为 dbf 文件不断变化 到目前为止 这是我的代码 public
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • Kotlin中如何在延迟后调用函数?

    如标题 有没有办法在延迟 例如1秒 后调用函数Kotlin 还有一个选项可以使用Handler gt postDelayed Handler postDelayed doSomethingHere 1000
  • 处理可选的 python 字典字段

    我正在处理加载到 Python 字典中的 JSON 数据 其中很多都有可选字段 其中可能包含字典之类的东西 dictionary1 required value1 one value2 two optional value1 one dic
  • 使 Java 类通用,但仅适用于两种或三种类型

    我很惊讶在 stackoverflow 上找不到这个问题 我只能将其归咎于我的谷歌搜索不佳 无论如何都要指出重复的问题 这是一个玩具类 它返回与您放入其中的内容相反的内容 目前它适用于整数 但只需要非常小的更改即可适用于字符串 public
  • 如何在SceneKit中从Collada文件中分离出多个动画

    我正在将第三方 dae Collada 文件作为场景加载到 SceneKit 项目中 dae 文件中有许多不同的动画 设置在不同的时间 帧 我试图弄清楚如何将它们分开并通过引用名称引用每个单独的动画 dae 文件中没有易于理解的参考名称 动
  • 如何从 Jupyter 4.x 获取 IPython 配置文件行为?

    官方 建议运行 IPython Notebook 服务器 并通过以下方式创建配置文件 ipython profile create nbserver 正如推荐的http ipython org ipython doc 1 interacti
  • DropCreateDatabaseAlways 未调用种子

    我在自定义数据库初始值设定项上调用 Seed 方法时遇到问题 我正在使用 EF 5 0 并具有以下代码 public static class MyDatabase public static void Initialize Databas
  • 是否可以使用gdb和qemu同时调试linux用户空间程序和内核空间?

    到目前为止 使用 gdb qemu 我可以单步执行 Linux 内核源代码 是否可以同时调试用户空间程序 例如 将程序从用户空间单步执行到内核空间 这样我就可以通过发出以下命令来观察 qemu 监视器上寄存器的变化info register
  • 在 foreach 循环内手动增加枚举器

    我在 foreach 循环内有一个嵌套的 while 循环 我想在满足特定条件时无限期地推进枚举器 为此 我尝试将枚举器转换为 IEnumerator 如果它位于 foreach 循环中 则必须如此 然后在转换的对象上调用 MoveNext
  • 网络编程:是否维护套接字?

    我目前正在将 API 从 C 转换为具有网络组件的 Java C 版本似乎在使用其类期间保持输入和输出流以及套接字打开 它是否正确 记住应用程序根据用户输入发送命令和接收事件 为每个 消息 打开一个新的套接字流是否更明智 我正在维护一个 S
  • 如何在 JavaScript 中取消移动或添加到参数对象的开头

    我刚刚学会了弹出第一个元素的约定arguments array 我还了解到这实际上是一个Object 现在我需要做相反的事情 我需要使用一个unshift将值添加到开头的操作arguments数组 或Object就像一个数组 这可能吗 我试
  • R 中 stri_detect_regex 错误

    我收到此错误 stri detect regex string pattern opts regex opts pattern 中的错误 正则表达式模式中的括号嵌套不正确 U REGEX MISMATCHED PAREN 当我运行代码时 f
  • 画布中的矩形尺寸错误

    我正在实现一个颜色选择器 渲染有问题 当我打电话时c fillRect 0 0 100 80 该矩形的大小是 103x42 像素 而不是 100x80 这里有什么问题吗 此外 矩形是抗锯齿的 我是否需要将位置偏移 0 5 0 5 以避免 A
  • 线性 SVM 模型的权重(在 R 中)?

    Using kernlab我用如下代码训练了一个模型 my model lt ksvm result f1 f2 f3 data gold kernel vanilladot 由于它是一个线性模型 我更喜欢在运行时将分数计算为特征值的简单加
  • CXF/ JAX-RS :从拦截器返回自定义响应

    当REST调用过程中发生异常时 我们需要返回自定义的错误代码和错误消息 我们创建了一个异常映射器提供程序 它适用于应用程序代码中的异常 但是 当 CXF 代码发生异常时 例如 我编写的 CustomValidationInterceptor
  • 如何在可变参数模板中匹配空参数包

    我有代码 template
  • 在 Xamarin.Forms 中使用 Thread.Sleep

    我想执行以下操作 MainPage new ContentPage Content new StackLayout Children new Button Text Thread Sleep Command new Command gt T
  • 确定 nvcc 需要哪些 gencode(compute_、arch_)值 - 在 CMake 中

    我使用 CMake 作为我的代码的构建系统 其中涉及 CUDA 我正在考虑将决定哪个任务自动化compute XX and arch XX我需要传递给我的 nvcc 以便为我当前计算机上的 GPU 进行编译 有没有办法做到这一点 使用 NV
  • 如何在 jqgrid 中添加新的按钮/图像列

    我在 ASP net MVC Web 应用程序中使用 JQgrid 我可以使用以下命令添加名为编辑的新按钮列formatters 但是 问题是我无法获取单击按钮的行中的列的值 例如 如果我单击第四行上的按钮编辑 新添加 我将需要获取该特定行
  • 在 Azure 存储上托管 SQLite DB?

    我需要在 Azure 上托管一个 SQLite 数据库 该数据库将在多个 Web 应用程序之间共享 我唯一的选择似乎是 Azure Blob 或文件存储 因为它们摆脱了提供在 Web 实例之间共享的专用存储的 Azure 网站 但是 似乎没
  • 如何条件正则表达式

    我想要一个正则表达式 如果它有 3 个实例 它就做一件事 在字符串中 如果它有超过 3 个实例 则为其他内容 例如 aaa bbb ccc ddd one part of the regex aaa bbb ccc ddd eee the