Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Java 正则表达式来匹配第二个单词或另一个单词的第一次出现_Java_Javascript_Regex - Fatal编程技术网

Java 正则表达式来匹配第二个单词或另一个单词的第一次出现

Java 正则表达式来匹配第二个单词或另一个单词的第一次出现,java,javascript,regex,Java,Javascript,Regex,我有一个需要解析以下内容的情况 Some Text Some Text SUB-TOTAL : $0.90 Some Text : $0.79- SUB-TOTAL : $0.11 TAX : $0.05 TOTAL $0.16 如果Tax不存在,我需要解析到最后一个“小计”,否则它必须解析到Tax 我不确定我在正则表达式中哪里做错了。(?=(税|(小计。?小计))*

我有一个需要解析以下内容的情况

Some Text
Some Text
SUB-TOTAL          :    $0.90 
Some Text          :    $0.79-
SUB-TOTAL          :    $0.11 
TAX                :    $0.05 
TOTAL      $0.16 
如果
Tax
不存在,我需要解析到最后一个“小计”,否则它必须解析到
Tax
我不确定我在正则表达式中哪里做错了。(?=(税|(小计。?小计))* 因为我对正则表达式的经验较少。谁能帮我一下吗


提前感谢。

要获取并包含小计或税及其价值,您可以使用:
*(?:(?:小计|税)[^\n]*)
。。。这是正确的截止线吗

编辑好-让我的头受伤了。。。但若要获得最后一笔小计(若存在),则需纳税:

^(?:(?:(?!.*SUB-TOTAL.*).*TAX[^\n]*)|(?:.*SUB-TOTAL[^\n]*))
希望这在你的正则表达式引擎中起作用

EDIT2此版本不返回小计/税行

^(?:(?:(?!.*SUB-TOTAL.*).*(?=TAX))|(?:.*(?=SUB-TOTAL)))

队长,谢谢你的快速反应。在某些情况下,我们会有两个“小计”,在这种情况下,它应该匹配第二个“小计”。在某些情况下,我们会有一个与第一个匹配的“小计”,也有一个情况,我们不会有“小计”,在这种情况下,它应该匹配到“TAX”Hi@user_in,正则表达式通常是贪婪的。。。因此,这将从包含小计或税的最后一次出现的行的开始到结束匹配。嗨@Captain,是的,给定的问题是贪婪和非贪婪的混合。我们有没有办法在正则表达式中实现这一点?对不起-我很困惑。。。你说最后的小计还是征税。。。税后小计是否与示例中相同?那么这个答案正好告诉你。嗨@Captain,是的,“税”总是在“小计”之后“税”将始终出现在内容中“小计”是可选的,如果存在,则为一次,在某些情况下为两次(如上例所示)。我看的是案例1:只有一个“小计”存在,它必须只匹配那个,而忽略“税”。案例2:如果存在两个“小计”,则必须与第二个匹配,并忽略第一个“小计”和“税”。案例3:如果只存在“TAX”,则它必须与“TAX”匹配您的正则表达式搜索任何单个字符
,该字符后跟字符串
TAX
小计
-一个可选字符-
小计
。现在您没有第二个版本,因此它基本上会返回单词
TAX
之前的换行符!
*
为您提供任意数量的任意字符,
?:
是非捕获组(
?=
是向前看)。这可能是对您的需求的误解,但如果适当的代码是可修改的,可能更好的设计是按原样解析文本,然后在解析后放入忽略税的逻辑。