Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带点分隔符的简单正则表达式_Regex - Fatal编程技术网

Regex 带点分隔符的简单正则表达式

Regex 带点分隔符的简单正则表达式,regex,Regex,我试图从两种格式中的一种中提取两个字符串,结果是两个组。格式如下: val1.val2 - group1 should be "val1" and group2 should be "val2" val2 - group1 should be "" and group2 should be "val2" 我得出的最接近的结论是: ([^\.]*?)\.?(.+) 但是第一组上的lazy操作符基本上使第二组在其中有“.”时捕获整个字符串。我很确定这是可行的: (?:([^.]*)\.)?(.

我试图从两种格式中的一种中提取两个字符串,结果是两个组。格式如下:

val1.val2 - group1 should be "val1" and group2 should be "val2"

val2 - group1 should be "" and group2 should be "val2"
我得出的最接近的结论是:

([^\.]*?)\.?(.+)

但是第一组上的lazy操作符基本上使第二组在其中有“.”时捕获整个字符串。

我很确定这是可行的:

(?:([^.]*)\.)?(.+)
它有:

  • 可选的非捕获组,包含:
    • 第1组:文字点之前的文本
    • 文字点
  • 第2组:任意数量的文本
如果圆点丢失,可选的非捕获组将不存在(组1也不存在),因此所有文本将进入组2。如果该点确实存在,则第1组和第2组均已填充


感谢@Dandan的改进

(?:([^.]*)\)(.*)(.*)
Jerry的解决方案是正确的,只做了一点修改(?:([^.]*)\)(.+)