Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 正则表达式捕获组帮助netsuite/oracle_Regex_Netsuite - Fatal编程技术网

Regex 正则表达式捕获组帮助netsuite/oracle

Regex 正则表达式捕获组帮助netsuite/oracle,regex,netsuite,Regex,Netsuite,我已经在regex101上玩了一段时间了,但我无法理解这一点,可能是因为NetSuite中使用的regex版本。在regex101上,它使用下面的字符串突出显示我想要作为组1的部分,但在NetSuite中不会产生任何结果 我试过:(?:,[^,]+,?){2}(,[^,]+,?) 要尝试从该数据集中获取第3个和第4个逗号之间的值,请执行以下操作: +000000006 06:23:15.291450,W-CHEVLPFULL-LP | ,+000000006 06:23:15.291450,W-

我已经在regex101上玩了一段时间了,但我无法理解这一点,可能是因为NetSuite中使用的regex版本。在regex101上,它使用下面的字符串突出显示我想要作为组1的部分,但在NetSuite中不会产生任何结果

我试过:
(?:,[^,]+,?){2}(,[^,]+,?)
要尝试从该数据集中获取第3个和第4个逗号之间的值,请执行以下操作:

+000000006 06:23:15.291450,W-CHEVLPFULL-LP | ,+000000006 06:23:15.291450,W-CHEVUS | ,
+000000044 08:09:52.291450,W-ADITIVOSSM-SM | KM8014,+000000044 08:09:52.291450,W-CHEVLPFULL-LP | KM8014,
+000000125 00:53:18.291450,W-ADITHPSMFULL-HP-SM | ,+000000125 00:53:18.291450,W-ADITIVOSSM-SM | ,
+000000138 05:08:01.291450,W-ADITHPSMFULL-HP-SM | KM8512,+000000138 05:08:01.291450,W-EMPTYAVAILABLE | KM8512,
+000000138 05:20:45.291450,W-ADITIVOSSM-SM | ,+000000138 05:20:45.291450,W-EMPTYAVAILABLE |
这将是:

W-CHEVUS | 
W-CHEVLPFULL-LP | KM8014
W-ADITIVOSSM-SM | 
W-EMPTYAVAILABLE | KM8512
W-EMPTYAVAILABLE |
[^,]*,[^,]*,[^,]*,([^,]*),?
我曾经尝试过其他“非捕获组”,结果很奇怪,这让我觉得它不受支持,或者我使用它们不正确


任何帮助都将不胜感激。谢谢

我猜这个表达式可能会返回所需的数据:

.+?,.+?,.+?,(.+?)(?:\s*,|\s*$)

在最复杂的情况下,您可以使用:

^([^,]*),([^,]*),([^,]*),([^,]*),?$
然后,您可以使用
\1
\2
\3
\4
访问所需的任何字段

测试


如果所有内容都在一行上,则需要字符串中的每四个元素

更新后的正则表达式为:

W-CHEVUS | 
W-CHEVLPFULL-LP | KM8014
W-ADITIVOSSM-SM | 
W-EMPTYAVAILABLE | KM8512
W-EMPTYAVAILABLE |
[^,]*,[^,]*,[^,]*,([^,]*),?
使用
\1
获取字符串

测试


当然,我不知道您的特定工具的特性,因此我无法“补偿”它们。

也许您可以使用单个捕获组和锚来断言字符串的开头。您的价值将在第一个捕获组中

^[^,]+(?:,[^,]+){2},([^,]+)
  • ^
    字符串的开头
  • [^,]+
    匹配1+次而不是逗号
  • (?:,[^,]+){2}
    匹配逗号重复2次,然后不是逗号重复1次以上
  • 匹配第三个逗号
  • ([^,]+)
    在组1中捕获匹配的1+次而不是逗号

由于您实际上是在幕后使用Oracle,因此您可以使用

REGEXP_SUBSTR(col, '^([^,]*,){3}([^,]+)', 1, 1, NULL, 2)

详细信息

  • ^
    -字符串的开头
  • ([^,]*,){3}
    -第1组出现三次,匹配除
    以外的任何0个或多个字符,然后是一个
  • ([^,]+)
    -第2组匹配一个或多个字符,而不是

最后一个
2
参数意味着只返回第2组值。

Netsuite中的正则表达式风格是什么?是否有任何方法允许您访问组?试试
(?我猜这是oracle数据库使用的任何东西。我正在调用REGEXP_SUBSTR()函数。搜索将我带到这里:如果它是oracle,请使用
REGEXP_SUBSTR(col,'^([^,]*,){3}([^,]+'),1,1,NULL,2)
什么是上下文?数据来自何处?如果这发生在suitescript中,那么是什么类型的脚本?我会问,因为您粘贴的数据不是我所知道的任何自然Netsuite数据格式。谢谢,这组数据位于第二个和第三个逗号之间,而不是第三个和第四个逗号之间,所以我将其切换为.+,.+,.+,(.+)这里的问题是,它实际上选择了与我想要的相反的结果。有什么想法吗?我非常喜欢这个解决方案的想法,在测试中,第4组正是我想要的。当我在演示或应用程序中尝试时,它没有给我任何结果,所以可能这对这种风格的正则表达式不起作用?从更多的实践来看,它看起来像是重复的无论第一个“完全匹配”是什么,添加不同的反向引用都会改变结果。此外,我意识到开头有“^”,结尾有$,实际返回的字符串是一行,为了可读性oops,我在示例中将其设置为多行。