如何匹配双引号或单引号或不引用正则表达式?

时间:2012-04-25 21:45:54

标签: regex

我试图从所有三种类型的输入中获取一些文本,但无法弄清楚如何处理未引用的情况。

到目前为止,我有:

name=['"](.*?)['"]

输入:

name="sometext"
name='sometext'
name=sometext

3 个答案:

答案 0 :(得分:4)

看起来您是C#开发人员,因此您可以使用第一个匹配组来确保使用相同的引号关闭它(从而支持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);

答案 1 :(得分:1)

我会使用OR运算符|分别指定三种情况:

('[^'"]*')|("[^'"]*")|([^'"]*)

根据您使用的正则表达式方言,您必须定义由OR运算符分隔的非匹配组,以及单词[^'"]*的匹配组。

答案 2 :(得分:0)

在不知道'name = asdf'之后可能是什么之后,假设它的空格或什么都没有 划定结束。

name= 
(?:
     (['"])((?:(?!\1).)*)\1    # (1,2)
 |   (\S*)                     # (3)
)

答案是2美元,3美元