双重正斜杠后直到冒号匹配正则表达式

时间:2016-01-29 23:35:13

标签: regex powershell

我试图在第一次出现双正斜杠之后匹配所有内容直到冒号。该字符串如下所示:

connectionUrl=jdbc\:postgresql\://somestringhere\:5432/somedb

到目前为止,我已经设法提出以下内容:

/\/([^/])(.*?)(?=\\)/

这抓住了:

/somestringhere

我正在试图弄清楚如何摆脱第二个/,以便我只抓住:

somestringhere

提前致谢!

4 个答案:

答案 0 :(得分:2)

在Powershell中,您可以使用基于正则表达式的后瞻和否定字符类:

int primeNumberList(int n, int m, int z) {
    int notPrime = 0;
    static done = 0;//add a bypass variable, init to zero

    if (n <= 1) {
        primeNumberList(n + 1, m, z);
    } 
    else
    {
        if(n == 10)
            {
                done = 1; //at this point all primes (except 1) are printed
                          //so set done to 1
            }
        if (n < m) 
        {
            if (z <= n / 2) 
            {
                if (n % z == 0) 
                {
                    notPrime = 1;
                    z = 2;
                } 
                else 
                {
                    primeNumberList(n, m, z + 1);
                }
            }
            if ((notPrime == 0) && (!done)) //test done before printing
            {
                printf("%d ", n);
            }
            primeNumberList(n + 1, m, z);
        }
    }
    return 0;//add this return statement
}

请参阅regex demo

说明:

  • (?<=//)[^/:\\]+ - 要求(?<=//)子字符串出现在...之前的正面观察...
  • // - [^/:\\]+/\\以外的一个或多个字符。

enter image description here

答案 1 :(得分:0)

你有几个选择,这里有两个:
使用后面的断言:

/(?<=\/\/)[^:]+/

使用匹配组:

\/\/([^:]+)/

===========================================

让我们说,您正在使用 Ruby
使用后面的断言:

str    = 'connectionUrl=jdbc:postgresql://somestringhere:5432/somedb'
regex  = /(?<=\/\/)[^:]+/
result = regex.match( str )[0]

使用匹配组:

str    = 'connectionUrl=jdbc:postgresql://somestringhere:5432/somedb'
regex  = /\/\/([^:]+)/
result = regex.match( str )[1]

===========================================

让我们说,您正在使用 PHP
使用后面的断言:

<?php
$str    = 'connectionUrl=jdbc:postgresql://somestringhere:5432/somedb';
preg_match( '/(?<=\/\/)[^:]+/', $str, $match );
print $match[0] . "\n";
?>

使用匹配组:

<?php
$str    = 'connectionUrl=jdbc:postgresql://somestringhere:5432/somedb';
preg_match( '/\/\/([^:]+)/', $str, $match );
print $match[1] . "\n";
?>

答案 2 :(得分:0)

这是我的尝试:

app/assets/...

输出:

$string = "connectionUrl=jdbc\:postgresql\://somestringhere\:5432/somedb"

if ($string -match '^.*\/\/(.+)\\:')
{
    $Matches[1]
}

答案 3 :(得分:0)

好的,根据Wiktor,Micky和Andreas(干杯!)的输入,我进行了一些实验,最后在powershell中使用以下正则表达式实现了所需的匹配:

(?<=//)[^/:]+(?=\\)

测试结果:

$var = 'connectionUrl=jdbc:postgresql://somestringhere:5432/somedb'
$var -match '(?<=//)[^/:]+(?=\\)'
$Matches.Values
somestringhere

再次感谢大家在这里的努力!