Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带异常的正则表达式字符间隔_Regex_Compiler Construction_Ocaml - Fatal编程技术网

Regex 带异常的正则表达式字符间隔

Regex 带异常的正则表达式字符间隔,regex,compiler-construction,ocaml,Regex,Compiler Construction,Ocaml,假设我有一个字符间隔['A'-'Z'],我想匹配除字母'F'之外的所有字符,我需要通过^操作符来匹配。因此,我不想把它分成两个不同的间隔 我怎样才能做到最好?我想写一些类似于['A'-'Z']^'F'(A-Z之间的所有字符,字母F除外)。本网站可作为参考: EDIT:与ocaml的关系是,我想在OCAMLEX中定义一个字符串文本的正则表达式,它以双引号(“)开头/结尾,并在一定范围内接受允许的字符。因此,我想排除双引号,因为它显然以字符串结尾。(我暂时不考虑转义字符)(?!F)[A-Z]或((?

假设我有一个字符间隔
['A'-'Z']
,我想匹配除字母
'F'
之外的所有字符,我需要通过
^
操作符来匹配。因此,我不想把它分成两个不同的间隔

我怎样才能做到最好?我想写一些类似于
['A'-'Z']^'F'
(A-Z之间的所有字符,字母F除外)。本网站可作为参考:

EDIT:与ocaml的关系是,我想在OCAMLEX中定义一个字符串文本的正则表达式,它以双引号(“)开头/结尾,并在一定范围内接受允许的字符。因此,我想排除双引号,因为它显然以字符串结尾。(我暂时不考虑转义字符)

(?!F)[A-Z]
((?!F)[A-Z])*


这将匹配除“F”之外的所有大写字符

因为很少发现两个正则表达式库/处理器具有完全相同的正则表达式语法,因此务必精确指定您使用的系统

问题中的标签让我相信您可能正在使用
ocamlex
构建扫描仪

['A'-'Z'] # 'F'
这大致基于中使用的语法:

Java和Ruby正则表达式包含一个具有非常不同语法的类似运算符:

[A-Z&&[^F]]
如果您使用的正则表达式库包括(Perl、Python、/C++等),则可以使用以下其中之一:

(?!F)[A-Z]
或者,您可以将肯定的先行断言与否定的字符类结合使用:

(?=[A-Z])[^F]

在这个简单的例子中,这两种结构都有效地实现了连接,但环顾断言并不是真正的连接。对于实现了连接运算符的正则表达式系统,请参见,例如,.

下面的正则表达式使用
^
实现了您想要的功能,并且没有拆分为不同的间隔s、 它还重新组合了您的原始想法(
['A'-'Z']^'F'

如果只允许使用大写字母,请删除
i
标志


使用字符类减法:

[A-Z&&[^F]]

一个例外,<>代码> [AG-E-Z] 是“OK”,但是当有很多异常时迅速分解。考虑辅音(非元音)的简洁表达式:

这辆火车失事了

[B-DF-HJ-NP-TV-Z]

字符集差异的ocamlex语法为:

['A'-'Z']#'F'

这相当于


['A'-'E''G'-'Z']

你能举例说明你试图匹配的内容和预期的输出吗?我认为这比分割范围更有效(
[A-EG-Z]
)你能解释一下与编译器构造的关系吗?这应该是一个被ocamlex接受的正则表达式吗?
ocaml
标记是不够的。你打算在哪个上下文中使用正则表达式?
ocamlex
Str
pcre-ocaml
,…?这里有很多选择,答案可能是这完全取决于您使用的后端。如果您使用的是ocamlex,则不能将其用作参考。ocamlex有一个非常特殊的正则表达式语法(包括使用
\uuu
而不是使用
作为通配符)。这很酷,但似乎它仅在Java和Ruby中可用
[A-Z&&[^F]]
[B-Z&&[^EIOU]]
[B-DF-HJ-NP-TV-Z]