Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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/4/regex/18.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_Regex - Fatal编程技术网

用于匹配各种类型的节头的Java正则表达式

用于匹配各种类型的节头的Java正则表达式,java,regex,Java,Regex,我正在尝试创建一个正则表达式(用于Java)来匹配可能的节标题。部分标题可以是罗马数字(最多39个)或类似“A.3.10”、“3.4”、“4”、“34.A”等,但似乎只匹配罗马数字或其他部分,即使我在正则表达式中使用了交替。我正在测试via 这是我的正则表达式: (\b(?:(?:X{0,3}(?:I[V|X]|V?I{0,3}))|(?:(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}))\b) 每个部分(罗马数字与字母+数字

我正在尝试创建一个正则表达式(用于Java)来匹配可能的节标题。部分标题可以是罗马数字(最多39个)或类似“A.3.10”、“3.4”、“4”、“34.A”等,但似乎只匹配罗马数字或其他部分,即使我在正则表达式中使用了交替。我正在测试via

这是我的正则表达式:

(\b(?:(?:X{0,3}(?:I[V|X]|V?I{0,3}))|(?:(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}))\b)
每个部分(罗马数字与字母+数字)本身似乎表现正常:

roman numeral:
(\bX{0,3}(?:I[V|X]|V?I{0,3})\b)

letter+digit:
(\b(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b)
以下是一些应该匹配的测试用例:

Section A.3
Section A . 34
Section 3 . A
Section 1.2.5.6
Section 1.2.5
Section 1.2. 5
Section 1 . 2 . 5
Section III
Section  XVI
Section IX
Section 3.B
Section 35.C
Section A.B.34
Section 3
Section 34
Section C
Section 34.35
Section A.3.C
Section 3.A.5
以下是一些不应该通过的:

A common phrase is this though..
Section AB.34
Section AB.5
Section CD
Section 345

有人能告诉我我遗漏了什么吗?

字母+数字的模式也匹配两种坏情况:

Section AB.34 -->
Section AB.<word boundary>34<word boundary>

还考虑使用两个正则表达式,并在java代码中执行OR操作。对于以后必须阅读您的代码的人来说,这更容易理解。

字母+数字的模式也与以下两种情况相匹配:

Section AB.34 -->
Section AB.<word boundary>34<word boundary>

还考虑使用两个正则表达式,并在java代码中执行OR操作。对于以后必须阅读您的代码的人来说,这更容易理解。

我的要求与原始问题中的细节有所不同。下面是我在两个不同用例中使用的两个正则表达式,以及它们通过的测试示例:

(一)

(\b(?)?
(二)


(\b(?我的需求最终与原始问题中的细节略有不同。下面是我在两个不同用例中使用的两个正则表达式,以及它们通过的测试示例:

(一)

(\b(?)?
(二)


(\b(?@user我确实关心有效的罗马数字(最多39个,意思是不需要担心L、D、C或M)。我修正了我的问题,以包括正确的示例(
Section III
,而不是
Section IIII
).疯狂的混音-看看
A.B.34
,如果它通过了怎么办?另外,你可以把
放到
[V|X]中
@ctwheels是的,应该通过。我现在为这个问题添加了几个正面和负面的测试示例。@user1145925多个正则表达式引擎-对于每种语言都不同,尽管有些使用相同的引擎。另外,
A.5.B
4.C.4
@user我确实关心有效的罗马数字(直到数字39,意思是不需要担心L、D、C或M)。我修正了我的问题,加入了正确的例子(
第三节
,而不是
第三节
)。疯狂的混音-看看
A.B.34
,如果它通过了怎么办?另外,你可以在
[V|X]中删除
@ctwheels是的,应该通过了。我现在为问题添加了几个正面和负面的测试示例。@user1145925多个正则表达式引擎-对于每种语言都不同,尽管有些使用相同的引擎。另外,
A.5.B
4.C.4
(\b(?<!\w)(?:[0-9]{1,2}|[A-Z])(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b(?<=\w))
(\b(?<!\w)X{0,3}(?:I[VX]|V?I{0,3})\b(?<=\w)(?:\s?\.\s?(?:[0-9]{1,2}|[A-Z])){0,2}\b(?<=\w))