繁体   English   中英

正则表达式查找或提取“<>”尖括号之间的字符串

[英]Regex to find or extract strings between the "<>" angle brackets

在以下字符串中,

Jason <jason@bigcreative.com>

如何提取尖括号内的部分?

我试过<\w>但没有用。

想法?

如果有所不同,我在 PHP 中使用preg_match()

user502515 已经给出了你想要的正则表达式。

我想补充一下为什么您的正则表达式<\w>不起作用:

\w是字符类[a-zA-Z0-9_] ,匹配该类中的任何一个字符。 要匹配更多字符,您需要使用量词:

  • +一个或多个和
  • *零个或多个

由于您要提取与模式匹配的字符串,因此需要将模式括在括号(..)中,以便捕获它。

现在您最初的任务是提取<..>之间的字符串,正则表达式<(\w+)>将无法完成这项工作,因为 char 类\w不包含@

要匹配任何内容,您可以使用正则表达式.*匹配任意字符串(无换行符)。

所以正则表达式<(.*)>匹配并捕获尖括号之间的任何字符串。

匹配是贪婪的,所以如果输入字符串是foo<foo@foo.com>, bar<bar.com>你将提取foo@foo.com>, bar<bar.com 要解决此问题,您可以通过添加一个? .*的末尾给我们正确的正则表达式<(.*?)>

然后使用<(.*?)>作为正则表达式。

要在< char 和下一个最接近的>之间进行匹配,中间没有<> (注意<.*?>匹配<..<...>之类的字符串),您可以使用

<([^<>]*)>

请参阅正则表达式演示

正则表达式详细信息

  • < - 一个<字符
  • ([^<>]*) - 第 1 组: <>以外的任何零个或多个字符
  • > - 一个>字符。

代码示例

  • - var res = Regex.Matches(text, @"<([^<>]*)>").Cast<Match>().Select(x => x.Groups[1].Value).ToList();
  • - const matches = [...Array.from(text.matchAll(/<([^<>]*)>/g), x => x[1])]
  • - $res = preg_match_all('~<([^<>]*)>~', $text, $matches)? $matches[1]: ""; $res = preg_match_all('~<([^<>]*)>~', $text, $matches)? $matches[1]: "";
  • - res = re.findall(r'<([^<>]*)>', text)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM