我试图从所有三种类型的输入中获取一些文本,但无法弄清楚如何处理未引用的情况。
到目前为止,我有:
name=['"](.*?)['"]
输入:
name="sometext"
name='sometext'
name=sometext
我试图从所有三种类型的输入中获取一些文本,但无法弄清楚如何处理未引用的情况。
到目前为止,我有:
name=['"](.*?)['"]
输入:
name="sometext"
name='sometext'
name=sometext
看起来您是 C# 开发人员,因此您可以使用第一个匹配组来确保它被相同的引号关闭(因此 support phrase="Don't forget apostrophes"
)。
Regex regex1 = new Regex(@"=(?:(['""])(.*?)\1|.*)");
string text = @"
name=""don't forget me""
name='sometext'
name='sometext'
name=sometext
";
foreach (Match m in regex1.Matches(text))
Console.WriteLine (m.Groups[2].Value);
我将使用 OR 运算符|
分别指定三种情况:
('[^'"]*')|("[^'"]*")|([^'"]*)
根据您使用的正则表达式方言,您必须定义由 OR 运算符分隔的非匹配组,并为 words 定义匹配组[^'"]*
。
在不知道 'name=asdf' 之后可能是什么的情况下,假设它的空格或没有任何东西
来分隔结尾。
name=
(?:
(['"])((?:(?!\1).)*)\1 # (1,2)
| (\S*) # (3)
)
答案是 2 美元加 3 美元