正则表达式分组并在第一个代字号后停止

时间:2016-09-22 09:37:52

标签: regex

我有这个文字 XX_YYY~foo~foo~foo ,我想分组 XX YYY 并跳过休息。 X和Y可以是一个或多个。

我已经尝试了(.*)_(.*)~.*?,但没有花费最后~

这有效(.*)_(.*)(~.*)(~.*)(~.*)但在XX和YY之后可能没有任何内容。

1 个答案:

答案 0 :(得分:1)

请记住.可以匹配任何字符,因此它不适合具有某种分隔符的字符串(除非您提取可能包含这些分隔符的子值)。

在你的情况下,似乎(如果你真的必须使用正则表达式),你可能依赖于^锚点和几个否定的字符类:

^([^_~]+)_([^~]+)

请参阅regex demo

模式匹配

  • ^ - 字符串开头
  • ([^_~]+) - 第1组匹配_~以外的一个或多个字符
  • _ - 下划线
  • ([^~]+) - 第2组捕获除了波浪号以外的1个或多个字符。

但是,如果您可以访问环境中的字符串方法,则字符串拆分会更自然。

如果您的模式用于某种需要完整字符串匹配的方法,请将.*添加到上述模式的末尾(如果字符串输入可以有换行符,请确保dotall模式已启用)。