【问题标题】:how to build a regular expression using turbo pascal lex to pattern match accented letters?如何使用 turbo pascal lex 构建正则表达式以模式匹配重音字母?
【发布时间】:2014-02-25 10:11:13
【问题描述】:

如上所述,我正在尝试构建一个正则表达式来获取所有法语字母,包括重音字母。不幸的是,重音字母一直给我错误。模式
([a-zA-Z-âàçèé])+ 格式正确吗?任何帮助将不胜感激。

这是我的 Lex 代码示例:

%{
uses lexlib; 
%}
%%
"Exit:"
begin
halt;
end;
" " ;
([a-zA-Z-âàçèé])+
begin
writeln('word  : ' + yytext);
end;
.   begin
writeln('errorrrrrrrrrrrrrr  : ' + yytext);
end;
\n  ;
%%
begin
if yylex=0 then ;
end.

【问题讨论】:

  • - 用于定义字符范围(例如:A-Z
  • ([a-zA-Z-âàçèé])+,如果您打算将 Z 和 â 之间的破折号视为文字,则应该可以。有什么错误?尝试取出破折号[a-zA-Zâàçèé]
  • 尝试将- 交换到字符类的末尾。
  • 可能是它只读取 7 位 ascii,屏蔽掉高位。也许它是一个问题。将重音字符一个一个取出来进行测试。
  • ([â])+ 即使这个正则表达式也不起作用。它显示:errorrrrrrrrrrrrrrr:❄

标签: regex


【解决方案1】:

根据您发布的链接here

您将在 Lex 中使用的格式是:

(['\u00E1'-'\u00EC','\u00EE'-'\u00EF'] ['\u0080'-'\u00BF'] ['\u0080'-'\u00BF'])

看来您必须将多字节字符用单引号引起来 ''


相关链接

这是Turbo Pascal LEX / FLEX and YACC / BISON (translated from French to English)上的一个页面

【讨论】:

    【解决方案2】:

    在阅读了一些文档并在此处进行测试后,这是可行的答案:

    [-"'"a-zA-Z\200-\245]*

    此正则表达式使用八进制格式的重音字符的八进制值,从 200 到 245。

    顺便说一下,Turbo pascal LEX 不支持 unicode 字符。

    最好的问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2011-04-06
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多