java正则表达式键:值多行
我有这样的文本: :33:88 app 2/8马来西亚浦中36100超人塔曼 :22:bla-bla\bla/bla-bla-bla :32:45//dsfd//qdsfqsdf :72D:示例 此示例有一个表单:key:value。值可以在一行或多行上 我尝试了regex(:[0-9]{2}[A-Z]?:)(.*),但我只得到了多行值中的第一行。当我尝试选项java正则表达式键:值多行,java,regex,Java,Regex,我有这样的文本: :33:88 app 2/8马来西亚浦中36100超人塔曼 :22:bla-bla\bla/bla-bla-bla :32:45//dsfd//qdsfqsdf :72D:示例 此示例有一个表单:key:value。值可以在一行或多行上 我尝试了regex(:[0-9]{2}[A-Z]?:)(.*),但我只得到了多行值中的第一行。当我尝试选项Pattern.DOTALL时,结果包含第一个键的所有文本 什么是正确的正则表达式?您可以使用 (?m)^(:\d{2}[A-Z]?:)(
Pattern.DOTALL
时,结果包含第一个键的所有文本
什么是正确的正则表达式?您可以使用
(?m)^(:\d{2}[A-Z]?:)(.*(?:\r?\n(?!:\d{2}[A-Z]?:).*)*)
看。不要使用模式.DOTALL
详细信息
-匹配行首(?m)^
-第1组:(:\d{2}[A-Z]?:)
-冒号:
-2位数字\d{2}
-1或0个大写ASCII字母[A-Z]?
-冒号:
-第2组:(.**(?:\r?\n(?:\d{2}[A-Z]?:).*)
-行的其余部分(除换行符以外的0个或更多字符)*
-零个或多个序列:(?:\r?\n(?!:\d{2}[A-Z]?:).*)
-换行符(\r?\n(?:\d{2}[A-Z]?:)
在Java 8中应替换为\r?\n
)与组1中使用的模式不符\r
-行的其余部分*
String pat = "(?m)^(:\\d{2}[A-Z]?:)(.*(?:\r?\n(?!:\\d{2}[A-Z]?:).*)*)";
见:
输出:
--- NEXT PAIR ---
Key::33:
Value: 88 app 2/8
superman taman, puchong
36100, Malaysia
--- NEXT PAIR ---
Key::22:
Value: bla bla \bla /bla
bla bla
--- NEXT PAIR ---
Key::32:
Value: 45//dsfd//qdsfqsdf
--- NEXT PAIR ---
Key::72D:
Value: Example
与
Pattern.MULTILINE
修饰符一起使用。感谢您的快速回答。完美地工作
--- NEXT PAIR ---
Key::33:
Value: 88 app 2/8
superman taman, puchong
36100, Malaysia
--- NEXT PAIR ---
Key::22:
Value: bla bla \bla /bla
bla bla
--- NEXT PAIR ---
Key::32:
Value: 45//dsfd//qdsfqsdf
--- NEXT PAIR ---
Key::72D:
Value: Example