我如何编写一个从后面开始阅读的正则表达式?
How do i write a RegEx that starts reading from behind?
我有一系列的词要捕捉。
我遇到以下问题:
- 字符串以一组固定的单词结尾
- 没有明确定义字符串由多少个单词组成。但是,它应该捕获所有以大写字母开头的单词(德语)。因此,左锚点应该是第一个以小写字母开头的单词。
示例(粗体是我试图捕获的):
我喜欢苹果香蕉和汽车。
盖房子可能是咸+硬杰西卡说。
这是我到目前为止尝试过的 RegEx,它只在“非捕获”字符串不包含任何大写单词的情况下有效:
/(?:[a-zäöü]*)([\p{L} +().&]+[Cars|Hard])/gu
大写字母使用\p{Lu}
:
(?:[\p{Lu}+()&][\p{L}+()&]* )+(?:Cars|Hard)
参见 live demo(显示匹配的变音字母和 ß)。
您可以以大写字符开始匹配,也允许德语大写字符,然后可以选择重复匹配以大写字符或“特殊字符”开头的单词。
然后以匹配 Hard 或 Cars 的交替结束比赛。
(?<!\S)[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*(?:\s+(?:[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*|[+()&]))*\s+(?:Hard|Cars)\b
说明
(?<!\S)
断言左侧的空白边界以防止在非空白字符之后开始匹配
[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*
匹配以大写字符开头的单词
(?:
非捕获组作为整体匹配
\s+
匹配 1+ 个空白字符
(?:
非捕获组
[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*
匹配以大写开头的单词
|
或
[+()&]
匹配“特殊”字符之一
)
关闭非捕获组
)*
关闭非捕获组并选择性重复
\s+
匹配 1+ 个空白字符
(?:Hard|Cars)
匹配其中一个选项
\b
防止部分单词匹配的单词边界
看到一个regex demo。
我有一系列的词要捕捉。
我遇到以下问题:
- 字符串以一组固定的单词结尾
- 没有明确定义字符串由多少个单词组成。但是,它应该捕获所有以大写字母开头的单词(德语)。因此,左锚点应该是第一个以小写字母开头的单词。
示例(粗体是我试图捕获的):
我喜欢苹果香蕉和汽车。
盖房子可能是咸+硬杰西卡说。
这是我到目前为止尝试过的 RegEx,它只在“非捕获”字符串不包含任何大写单词的情况下有效:
/(?:[a-zäöü]*)([\p{L} +().&]+[Cars|Hard])/gu
大写字母使用\p{Lu}
:
(?:[\p{Lu}+()&][\p{L}+()&]* )+(?:Cars|Hard)
参见 live demo(显示匹配的变音字母和 ß)。
您可以以大写字符开始匹配,也允许德语大写字符,然后可以选择重复匹配以大写字符或“特殊字符”开头的单词。
然后以匹配 Hard 或 Cars 的交替结束比赛。
(?<!\S)[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*(?:\s+(?:[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*|[+()&]))*\s+(?:Hard|Cars)\b
说明
(?<!\S)
断言左侧的空白边界以防止在非空白字符之后开始匹配[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*
匹配以大写字符开头的单词(?:
非捕获组作为整体匹配\s+
匹配 1+ 个空白字符(?:
非捕获组[A-ZÄÖÜß][a-zA-ZäöüßÄÖÜẞ]*
匹配以大写开头的单词|
或[+()&]
匹配“特殊”字符之一
)
关闭非捕获组
)*
关闭非捕获组并选择性重复\s+
匹配 1+ 个空白字符(?:Hard|Cars)
匹配其中一个选项\b
防止部分单词匹配的单词边界
看到一个regex demo。