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的值。