正则表达式、希腊字符和 *-量词不起作用(但 +-量词有效)?

问题描述 投票:0回答:0

我使用这个正则表达式

[\p{Greek}]
来匹配任何希腊字符。它按预期工作并匹配行中的第一个希腊字符。但是,我想匹配第一个字符之后的所有希腊字符,但 * 量词似乎不适用于希腊字符。

这是我的输入数据。前三个空格,一个双引号,然后是一个希腊语或拉丁语字符串,一个或多个空格,以 " 结尾,和一个新行。

   "ξηλξλκξ λκλξλξ",
   "lkjlkj kjljl",
   "δδσασα ασδ ασδφ",
   "xxaax asdsd dsds",
   "δερεφε αδσφδσ",

一个。

^.*?[\p{Greek}|\s]
- 只匹配 all 行上的第一个空格。

b。

^.*?[\p{Greek}|\s]+
- 在 all 行匹配所有三个初始空格。

c。

^.*?"[\p{Greek}|\s]+
- 匹配用希腊字符书写的整行

d。

^.*?"[\p{Greek}|\s]*
- 匹配拉丁语行上的初始空格和
"
以及整行,不包括希腊语行末尾的
",

e。

[\p{Greek}]*
- 匹配拉丁文行中的所有字符,但一次只匹配一个(尽管有*)。在希腊语行中,它匹配初始空格,一次一个,但不是第一个
"
。然后匹配第一个单词,而不是单词之间的空格,

(e) 超级混乱。如果我在字符串

   "XYZ NOP",
上使用该正则表达式进行搜索和替换,并为当时找到的所有内容插入
A
(“替换并查找下一个”),结果看起来像这样
 A  A"XAYZA NAOPA",A
。但是,如果我执行“全部替换”,这就是结果 'A A A A"AXAYAZA ANAOAPA"A,'。尽管进行了搜索和替换,但所有原始字符仍保留,或多或少随机插入。

我不知道这里发生了什么。

这里有几个问题:

  1. 为什么^.*?只匹配 (a) 中的第一个空格而不是 (b) 中的 "?
  2. 为什么 + 和 * 给出不同的结果?
  3. (e) - 说什么!?我不明白这里的 * 量词行为。

为此我正在使用 BBEdit。自 90 年代以来,我一直在使用 BBEdit 和正则表达式,并且从未遇到过任何有关其正则表达式实现的问题。但是 OTOH,我以前从未尝试过使用希腊字符。

regex special-characters quantifiers character-set
© www.soinside.com 2019 - 2024. All rights reserved.