Regex 用于捕获除正斜杠以外的每个字符的正则表达式

Regex 用于捕获除正斜杠以外的每个字符的正则表达式,regex,regex-group,Regex,Regex Group,我有以下两个示例字符串: "taxonomy": "abc/about_abc/bsc/archive/2009/presentations_dec" "taxonomy": "about/archive/term" "taxonomy": "_decommisioned/ntp-server.niehs.nih.gov/htdocs/results_status/resstatf" 我已尝试使用以下正则表达式: "taxonomy": "(\w+[^\/])\/?"? 目标是获取这些字

我有以下两个示例字符串:

"taxonomy": "abc/about_abc/bsc/archive/2009/presentations_dec"

"taxonomy": "about/archive/term"

"taxonomy": "_decommisioned/ntp-server.niehs.nih.gov/htdocs/results_status/resstatf"
我已尝试使用以下正则表达式:

"taxonomy": "(\w+[^\/])\/?"?
目标是获取这些字符串中的每一个,并将它们分解到正斜杠上各自独立的行上,因此
term1/term2/term3
等于

term1
term2
term3
我也不知道每行有多少个术语,这就是为什么它们会像现在这样分开。可以是最少一个,最多7个。我的填充正则表达式如下所示:

(    "taxonomy": "(\w+[^\/])?\/?(\w+[^\/])?\/?(\w+[^\/])?\/?(\w+[^\/])?\/?(\w+[^\/])?\/?(\w+[^\/])?\/?(\w+[^\/])?\/?")

如何调整我的捕获组以获得除前斜杠以外的所有内容?

如注释中所述,在第三个字符串中,这部分
ntp server.niehs.nih.gov
\w

但是,您可以通过不匹配正斜杠来简化表达式,方法是使用求反字符类和重复模式来匹配正斜杠,然后再使用1+倍的非正斜杠

然后你可以用正斜杠分割你的比赛

图案

"taxonomy": "\K[^/\n]+(?:/[^/\n]+)+(?=")
解释

  • “分类法”:
    逐字匹配
  • “\K
    匹配双引号,然后忘记使用
    \K
  • [^/\n]+
    使用否定字符类匹配1+次非正斜杠
  • (?:/[^/\n]+)+
    重复模式以匹配
    /
    ,然后1+次不是
    /
  • (?=”)
    正面向前看以断言右侧是双引号
|

例如,如果在php中使用explode:

$pattern = '~"taxonomy": "\K[^/\n]+(?:/[^/\n]+)+(?=")~';

$strings = [
    '"taxonomy": "abc/about_abc/bsc/archive/2009/presentations_dec"',
    '"taxonomy": "about/archive/term"',
    '"taxonomy": "_decommisioned/ntp-server.niehs.nih.gov/htdocs/results_status/resstatf"'
];

foreach ($strings as $string) {
    preg_match($pattern, $string, $match);
    print_r(explode('/', $match[0]));

}
结果:

Array
(
    [0] => abc
    [1] => about_abc
    [2] => bsc
    [3] => archive
    [4] => 2009
    [5] => presentations_dec
)
Array
(
    [0] => about
    [1] => archive
    [2] => term
)
Array
(
    [0] => _decommisioned
    [1] => ntp-server.niehs.nih.gov
    [2] => htdocs
    [3] => results_status
    [4] => resstatf
)

如果你什么都想要,那为什么还要费心于
\w+
?只需执行
[^\/]+
,这就是第三个输入中的问题。。。它有一个点和连字符,不能满足
\w
的要求。我的代码有错误。您的意思是[^\/\n],跳过正斜杠吗?我使用的是PCRE regex find replace engine如果模式的分隔符是
/
,则必须像
\/
一样转义正斜杠。在我的示例中,分隔符是
~
,因此不必转义它。