如何使用正则表达式查找嵌套引用?

时间:2011-06-23 20:03:48

标签: regex

  

“你好,我的名字是”乔“,我13岁。”

我希望正则表达式只打印出“Joe”,可以这样做吗?

4 个答案:

答案 0 :(得分:2)

你没有提供你正在使用这个正则表达式的平台,但这是使用php的一种方式:

$content='Hello my name is "Joe" and I\'m 13.';
preg_match('/"[^"]*"/', $content, $m);
print_r($m);

更新

根据下面的评论,这是OP可能正在寻找的代码:

$content='foo "Hello my name is "Joe" and I\'m 13." bar';
preg_match('/"[^"]*"([^"]*)"/', $content, $m);
var_dump($m[1]);

输出

string(3) "Joe"

答案 1 :(得分:2)

(?<!"[^"]*)"([^"]+)"

考虑这个字符串(使用\ escaped quotes): string test =“\”你好,我的名字是“乔”,我13岁。\“”;

该表达式将与"Joe"匹配,第一次捕获将为Joe。我无法分辨你试图从你的问题中得到什么。

在C#中:

var match = Regex.Match(mystring,
            "(?<!\"[^\"]*)\"([^\"]+)\"",
            RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
Console.WriteLine(match.Value);            // "Joe"
Console.WriteLine(match.Groups[1].Value);  // Joe

答案 2 :(得分:2)

一个正则表达式,它将在另一个带引号的字符串中找到带引号的字符串:

/\".*?\"(.*)\".*?\"/

http://rubular.com/r/L8dMtNZxP5

内部引用的字符串将位于\ 1。

现在,如果你想要一个更复杂的嵌套结构,你需要额外的逻辑来解释它。链接的网站可以帮助您生成任何进一步的逻辑。

答案 3 :(得分:1)

这是使用Python的re模块在双引号内查找单个单词的一种相当通用的方法。

>>> import re
>>> string = '''"Hello my name is "Joe" and I'm 13"'''
>>> re.compile('"\w+"').search(string)
<_sre.SRE_Match object at 0xb73dc720>
>>> _.group()
'"Joe"'