Regex 如何在正则表达式中获取破折号字符之前的所有内容?
我有以下形式的字符串:Regex 如何在正则表达式中获取破折号字符之前的所有内容?,regex,Regex,我有以下形式的字符串: en-US //return en en-UK //return en en //don't return nl-NL //return nl nl-BE //return nl nl //don't return 我想返回上面代码中指出的一个。我尝试过。*\-但返回的是en-。我如何在斜线之前停止返回?那么只回恩?我正在测试它 一个选项是在字符串的开头为前两个小写字符使用捕获组,然后匹配下面的破折号和两个大写字符 ^([a-z]{2})-[A-Z]{2}$
en-US //return en
en-UK //return en
en //don't return
nl-NL //return nl
nl-BE //return nl
nl //don't return
我想返回上面代码中指出的一个。我尝试过。*\-但返回的是en-。我如何在斜线之前停止返回?那么只回恩?我正在测试它 一个选项是在字符串的开头为前两个小写字符使用捕获组,然后匹配下面的破折号和两个大写字符
^([a-z]{2})-[A-Z]{2}$
如果要在破折号之前捕获多个字符[a-z]或除短划线或换行符[^-\r\n]以外的任何字符,然后进行匹配,可以使用+之类的量词匹配1+次,或使用{2,}匹配2次或更多次
^([a-z]{2,})-
你可以积极地向前看
.*(?=-)
如果您总是特别寻找破折号之前的2个小写字母字符,那么在正则表达式中更具针对性可能是一个好主意
[a-z]{2}(?=-)
.+??=-作为正则表达式,应该执行您要求的操作
在哪里
。匹配任何字符
+??在一次和无限次之间进行匹配,但它使用延迟扩展尽可能少地进行匹配
及
?=-是一个正向前瞻,因此它在字符串中向前检查,并且仅在字符串中的下一个字符为-时匹配并返回,但返回值将不包括值-但当有两个以上的字符时,这不起作用,但可能我不清楚这是否可行。这正是我所需要的!您还可以使用^[^-]+-并获取组1的值。