regex - 如何使正则表达式的一部分成为可选的?

标签 regex

假设我有以下正则表达式,它匹配一个以分号结尾的字符串:

\".+\";

它将匹配除空字符串之外的任何字符串,如下所示:

"";

我试过用这个:

\".+?\";

但这没有用。

我的问题是,如何使 .+ 成为可选的一部分,这样用户就不必在字符串中输入任何字符?

最佳答案

要使 .+ 可选,您可以:

\"(?:.+)?\";

(?:..) 被称为 non-capturing group .它只做匹配操作,不会捕获任何东西。在非捕获组之后添加 ? 使整个非捕获组可选。

或者,您可以:

\".*?\";

.* 会贪婪地匹配任何字符零次或多次。在 * 之后添加 ? 会强制正则表达式引擎进行尽可能短的匹配。

关于regex - 如何使正则表达式的一部分成为可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572866/

相关文章:

c# - 日期的正则表达式

html - DotAll 和多行正则表达式

java - 正则表达式-如何在第一次出现字符时停止

从二次方程中提取系数的Java程序

regex - 我可以安全地使用哪些字符来表达正则表达式中的自定义含义

javascript - 在 Python 中用正则表达式替换

php - JavaScript 和 PHP 之间前瞻断言的惰性差异

将正则表达式解析为 AST 的 Python 库?

sql - Oracle SQL : Is it possible using SUBSTR and INSTR to return ALL Strings in a given text field?

c++ - QRegExp 仅解析以特定字符开头的字符串