2

我想找到所有包含至少 1 个西里尔字符的字符串(基本上是 /.*[А-я].*/),但注释除外。

注释是以 2 个或更多 / 字符开头的字符串或字符串的一部分。目前我得到了这个正则表达式,它起到了一些作用:

^(?=^.*?[А-я]+).*?((?=[\/]{2,})|(^(?:(?![\/]{2,}).)*$))

但我想得到更少的臃肿和更快的表达。

另外一个问题是:谁能解释为什么这个工作有效?我通过反复试验将它结合起来,但我不确定我是否完全理解它是如何工作的,因为当我尝试在任何部分更改它时 - 它会停止工作。

4

1 回答 1

2

以下正则表达式将匹配任何前面没有双斜杠的西里尔字符

(?<!/{2}.*)[А-я]

它通过使用否定的lookbehind 指定它不应在其前面加上双斜杠。

您尚未指定您使用的正则表达式的风格,但请注意某些风格不支持环视。例如 PCRE (javascript) 没有。你在你的正则表达式中使用了其中的 3 个,所以我认为它没问题。

于 2012-04-07T19:08:47.727 回答