Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 如何使Regex前瞻性匹配一位数和两位数?_Java_Regex_Regex Lookarounds - Fatal编程技术网

Java 如何使Regex前瞻性匹配一位数和两位数?

Java 如何使Regex前瞻性匹配一位数和两位数?,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,比如说,我有一个字符串,读着“1this12string”。我想将String#split与使用lookahead的regex一起使用,这将为我提供[“1this”,“12string”] 我当前的语句是(?=\d),它对于一位数非常有效。我在修改此语句以同时包含1位和2位数字时遇到问题。在后面添加一个查找,这样您就不会在数字中拆分: (? 请参阅。如果确实要使用Regex Lookahead,请尝试以下方法: (\d{1,2}[^\d]*)(?=\d|\b) 请注意,这假设每个字符串拆分的

比如说,我有一个字符串,读着
“1this12string”
。我想将
String#split
与使用lookahead的regex一起使用,这将为我提供
[“1this”,“12string”]


我当前的语句是
(?=\d)
,它对于一位数非常有效。我在修改此语句以同时包含1位和2位数字时遇到问题。

在后面添加一个查找,这样您就不会在数字中拆分:

(?

请参阅。

如果确实要使用Regex Lookahead,请尝试以下方法:

(\d{1,2}[^\d]*)(?=\d|\b)

请注意,这假设每个字符串拆分的前面必须有1或2个数字。如果不是这样,请让我们知道,以便我们可以进一步增强它

正则表达式逻辑
  • \d{1,2}
    匹配前面的1或2位数字
  • [^\d]*
    匹配前1位或前2位之后的非数字字符
  • 将上述两个段括在括号()中,使其成为提取匹配文本的捕获组
  • (?=\d
    以满足您使用Regex Lookahead的要求
  • |\b
    允许匹配文本位于文本末尾(单词边界前)
我认为您也可以使用更简单的正则表达式来完成任务,而无需使用相对更复杂的功能,如正则表达式前瞻。例如:

\d{1,2}[^\d]*
您可以在中看到,这同样适用于您的示例输入。无论如何,如果您的要求超出此范围,请让我们知道如何对其进行微调。

使用


String[]splits=String.split(“(?换句话说,您希望在(a)后面有数字的位置拆分,但同时您希望(b)如果前面有数字,则防止拆分,例如在
“1 | 2string”
中用
“1 | 2string”
标记的case-In-place。您已经有了(a)通过
表示的条件(?=\d)
。要表示条件(b),可以使用类似
(?)的负查找?。
\d{1,2}[^\d]*