正则表达式匹配部分的字符串再次
正则表达式的乐趣...正则表达式匹配部分的字符串再次
就拿http://something.com/en/page
我想测试一个精确匹配上/ EN /包括斜线,否则它会匹配“ en'来自字符串的其他部分。
我确定这很容易,对于除我以外的人!
编辑:
我使用它的string.match()在JavaScript
那么这真的取决于编程语言将执行正则表达式,但实际正则表达式是简单
/en/
对于.Net,以下代码正常工作:
string url = "http://something.com/en/page";
bool MatchFound = Regex.Match(url, "/en/").Success;
以下是JavaScript版本:
var url = 'http://something.com/en/page';
if (url.match(/\/en\//)) {
alert('match found');
}
else {
alert('no match');
}
DUH
谢谢Welbog和克里斯·巴兰斯,以使什么应该是最明显的一点。这不需要正则表达式来解决。它只是一个包含声明。正则表达式只能用在需要的地方,应该是我的第一个考虑因素,而不是最后一个。
任何理由/en/
是行不通的?
这是行不通的,因为斜杠是正则表达式的组成部分,因此需要根据Parappa的回答来逃避它,因为斜杠通常用作正则表达式的指示符,在大多数posix兼容系统(如unix)中,会有额外的信息提供,例如搜索忽略大小写字符串将/ some_string /我。 – t0mm13b 2009-11-23 19:01:10
而且它基于什么编程语言,请参阅TheLameDuck的答案。绝对是C#,你需要避开正斜杠。 – t0mm13b 2009-11-23 19:02:20
虽然我很欣赏这些荣誉,但它只是反斜杠\才需要被转义。 另外,如果出现问题,您可以随时回避整个问题,例如:string test =#“my back \ slash”; – 2009-11-23 19:04:22
您可能需要逃避正向斜线...
/\/en\//
只要做一个字符串匹配,正则表达式对于这种情况是矫枉过正的。 – 2009-11-23 22:08:06
/\/en\//
或许/http\w*:\/\/[^\/]*\/en\//
如果你想为特别地匹配/en/
,你并不需要一个正则表达式的。只需使用您的语言相当于contains
来测试该子字符串。
如果你想匹配的两条斜线之间的URL中的任意两个字母的一部分,你需要这样的表达式:
/../
如果你想要捕捉的两个字母的代码,封闭期间括号:
/(..)/
根据你的语言,你可能需要逃避斜线:
\/..\/
\/(..)\/
如果你想确保你匹配字母代替任何字符(包括数字和符号),您可能希望使用表达式像这个:
/[a-z]{2}/
这将大多数正则表达式的变化来识别。
同样,你可以逃避斜线,并添加一个捕获组是这样的:
\/([a-z]{2})\/
如果你不需要逃避他们:
/([a-z]{2})/
这个表达式将匹配任何字符串形式为/xy/
,其中x
和y
是字母。所以它会匹配/en/
,/fr/
,/de/
等
在JavaScript中,您将需要转义版本:\/([a-z]{2})\/
。
+1指出Regexps对于精确匹配不是必需的。 – Heinzi 2009-11-23 19:32:55
你并不需要为这个正则表达式:
location.pathname.substr(0, 4) === "/en/"
当然,如果你坚持使用正则表达式,使用:
/^\/en\//.test(location.pathname)
有关的编程语言,你需要的正则表达式? C#和VB.net,例如都明白'“/ en /”',但这显然不是你正在寻找的...... – Heinzi 2009-11-23 18:59:25
@Heinzi - JavaScript有定义一个正则表达式的速记方式,例如var someRegex =/\/en \ // ig,它也可以像这样写var someRegex = new RegExp(“/ en /”,“ig”)。速记方式通常是优选的。我只使用新的RegExp,如果我需要通过串联字符串来构建正则表达式。 – nickytonline 2009-11-23 19:15:55