如何在 C# Regex 中使用“或”、“和”?

Posted

技术标签:

【中文标题】如何在 C# Regex 中使用“或”、“和”?【英文标题】:How can I use "or", "and" in C# Regex? 【发布时间】:2010-09-19 15:23:07 【问题描述】:

我有一个与字符串匹配的模式: 字符串模式 = @"asc" 我正在检查 SQL SELECT 查询是否有正确的语法、语义…… 我需要说,在查询字符串的末尾我可以有“asc”或“desc”。 怎么能用 C# 写呢?

【问题讨论】:

【参考方案1】:

看起来像

new Regex("asc$|desc$").IsMatch(yourQuery)

假设您要求 asc/desc 是查询的结尾。您也可以使用(?:asc|desc)$,这与单个$ 相比更简洁,但可读性较差。

【讨论】:

【参考方案2】:

您需要“交替”运算符,即管道。

例如,我相信这将表示为:

asc|desc

如果你想让它成为一个非捕获组,你可以按照正常方式进行。我不是正则表达式专家,但这是首先要尝试的。

编辑:MSDN 有一个关于 regular expression language elements 的页面,可能会对您有所帮助。

【讨论】:

【参考方案3】:

只是为了添加其他答案,您可能还想对正则表达式应用忽略大小写选项。

string tempString = "SELECT * FROM MyTable ORDER BY column DESC";

Regex r = new Regex("asc$|desc$", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);

bool answer = r.IsMatch(tempString);

【讨论】:

【参考方案4】:

我认为以下内容在 .Net 中可以用作正则表达式:

asc|desc\z

.. 它将匹配行尾和字符串尾。如果您只想结束字符串尝试:

asc|desc$

【讨论】:

以上是关于如何在 C# Regex 中使用“或”、“和”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 REGEX 将作者拆分为对象或数组 C#?

何时不在 C#(或 Java、C++ 等)中使用 Regex

如何使用 .NET C# regex 或其他任何方法提取 *>...* 之间的文本字符串?

在 C# 中使用 Json.Parse 或 Regex 获取单行 JSON 响应

如何在 C# 中使用 Regex 将 [number] 替换为 number - 1?

如何在 C# Regex 中使用lookbehind 来跳过重复前缀模式的匹配?