无法使用 Java 正则表达式匹配字符串的最后部分 [重复]
Posted
技术标签:
【中文标题】无法使用 Java 正则表达式匹配字符串的最后部分 [重复]【英文标题】:Unable to match final part of String using Java Regex [duplicate] 【发布时间】:2021-02-23 07:41:07 【问题描述】:我有一个字符串,它是一个网站名称列表,后跟一个分隔符,然后是 url,每个名称/url 对后跟一个空格和一组新行分隔符。不幸的是,新行分隔符并不总是存在,每对之间都有一个空格,但由于站点名称可以有空格,我不能简单地在空格上分割。
我有一个正则表达式,并且(根据 regexPlanet)它匹配除最后一对之外的所有内容。
是否也可以得到最后一对?
正则表达式:(.+?(?=\|)).(.+?(?= ))
示例字符串:Website 1|https://site1.example.com \r\nWeb Site 2|https://2.example.co.uk \r\nSite 3|https://w3.example.com.au site 4|https://s4.example.org \r\nWeb Site5|https://s5.other.example.ac.uk/
RegexPlanet 报告该正则表达式将匹配前四个站点,而不是第五个站点。
欢迎任何想法
【问题讨论】:
你可以试试([^|]+)\|(.+?(?=\s|\z))
【参考方案1】:
您可以将此正则表达式与 2 个捕获组一起使用:
([^|]+)\|(.+?(?=\s|\z))
RegEx Demo
正则表达式详细信息:
([^|]+)
:捕获组 #1 以匹配任何不是 |
的字符的 1+
\|
:匹配文字 |
(.+?(?=\s|\z))
: 捕获组 #2 以匹配后跟空格或行尾的任何字符的 1+
【讨论】:
因为这两个答案都会回答我的问题,所以这个改进了我的正则表达式并解释了正则表达式。谢谢。【参考方案2】:刚刚将|$
添加到正则表达式的末尾
(.+?(?=\|)).(.+?(?= |$))
【讨论】:
以上是关于无法使用 Java 正则表达式匹配字符串的最后部分 [重复]的主要内容,如果未能解决你的问题,请参考以下文章