我的网址很少,如下所示:
//Place all params in an array
var params = [x,y,z];
//Instantiate random number generator
var r = new Random();
//use 0 for min and 2 for max in this example and return
//the random array position
return params[r.Next(int min, int max)];
我想检索“最后一个斜杠和问号(如果存在)之间的字符串”,即,对于上面的例子,我想检索“example”。为此,我使用了下面的正则表达式,但它不起作用。有人可以解释一下为什么它不起作用。我查了“https://regex101.com/”作为解释,但他们的解释似乎与我的想法相符,但这不是它的工作方式。匹配问号时存在一些问题,“\?*”无法匹配一个或多个问号。
join -t "," <(dos2unix <QualifiedEmployeees.csv) <(dos2unix <AllEmpployees.txt)
仅供参考,我可以在正则表达式之后写下我的用例:
www.xyz.com/search/example?x=123
www.xyz.com/search/example
我怀疑下面的正则表达式不起作用的原因:
.*\/(.*?)\?*.*
答案 0 :(得分:1)
使用正向前瞻性正则表达式。
\/([^\/?]*)(?=[^\/]*$)
或
(?<=\/)[^\/?]*(?=[^\/]*$)
或
.*\/(.*?)(?:\?|$)
您的上一个正则表达式无效,因为\?*
匹配零个或多个?
。如果存在,则使正则表达式匹配?
或使其匹配,直到行结束。 (?:\?|$)
期望匹配旁边有?
或行结尾。
答案 1 :(得分:1)
您可以使用此正则表达式:
.*\/([^\?]+)
匹配“字符串中所有非问号字符的最小长度为1”。重要的是要转义?
(\?
),因为它是0 or 1
的保留字符。请注意,这预计在最后/
之后至少有一个字符(i.e. www.xyz.com/search/example/?
会导致example/
)。如果应该避免这种情况,请将+
替换为*
匹配不包含?
的全长字符串:
.*\/([^\?]*)
关于您的问题,为什么.*\/(.*?)\?*.*
不起作用。 (.*?)
部分匹配任意长度(包括0长度)的任何字符(.
)的所有字符串,其中包含或不存在(?
),因此基本上它与空字符串匹配。尾部\?*.*
匹配所有可能或不以任意数量的?开头的字符串,因此它基本匹配所有字符串,相当于.*