3

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

到目前为止,我有:

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

输入:

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

3 回答 3

4

看起来您是 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);
于 2012-04-25T22:03:12.573 回答
2

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

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

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

于 2012-04-25T22:00:03.947 回答
0

在不知道 'name=asdf' 之后可能是什么的情况下,假设它的空格或没有任何东西
来分隔结尾。

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

答案是 2 美元加 3 美元

于 2012-04-25T22:07:41.620 回答