标签: regexp-grammars

只有一个孤独插入符号的角色类怎么办?

在尝试回答问题时,在找到特定字符时将文本写入新行,我使用了Regexp :: Grammars.它一直对我感兴趣,最后我有理由学习.我注意到作者的描述部分有一个LaTeX解析器(我是狂热的LaTeX用户,所以这让我很感兴趣)但是它有一个奇怪的构造在这里看到:

    <rule: Option>     [^][\$&%#_{}~^\s,]+

    <rule: Literal>    [^][\$&%#_{}~^\s]+
Run Code Online (Sandbox Code Playgroud)

什么的[^]字符类完成?

regex perl latex regexp-grammars

11
推荐指数
1
解决办法
393
查看次数

我怎样才能使用perl6正则表达式metasyntax,<foo regex>?

在perl6语法,如所解释这里(注意,不能保证设计文件被向上最新作为实现完成)时,如果开度角托架之后是一个标识符,则构建体是一个子规则的呼叫时,方法或功能.

如果标识符后面的字符是开头,那么它是对方法或函数的调用,例如:<foo('bar')>.正如在页面下方进一步解释的那样,如果标识符后面的第一个字符是空格,那么直到结束角度的其余字符串将被解释为方法的正则表达式参数 - 引用:

 <foo bar>
Run Code Online (Sandbox Code Playgroud)

或多或少相当于

 <foo(/bar/)>
Run Code Online (Sandbox Code Playgroud)

使用此功能的正确方法是什么?在我的例子中,我正在解析面向行的数据,而我正在尝试声明一条规则,该规则将对正在解析的当前行进行单独搜索:

#!/usr/bin/env perl6
# use Grammar::Tracer ;

grammar G {
    my $SOLpos = -1 ;   # Start-of-line pos

    regex TOP {  <line>+  }

    method SOLscan($regex) {
        # Start a new cursor
        my $cur = self."!cursor_start_cur"() ;

        # Set pos and from to start of the current line
        $cur.from($SOLpos) ;
        $cur.pos($SOLpos) ;

        # Run the given regex on the cursor
        $cur = $regex($cur) ;

        # If pos is >= …
Run Code Online (Sandbox Code Playgroud)

perl6 regexp-grammars

9
推荐指数
1
解决办法
148
查看次数

减少 perl 启动时间的最佳方法

几年来,我一直在断断续续地研究 Perl 解析器,但由于它一直处于 pre-alpha 阶段,我从不担心会加快它的速度。然而,我已经开始研究优化它的方法,并对我的发现感到惊讶。

经过一些算法和正则表达式优化后,正常执行大约需要 3.5 秒,其中,大约 2.3 秒是 Perl 启动所需的时间(我在放置“die(”Done ");" 在第一行)。我知道 Regexp::Grammars 不是最快的 Perl 模块,但它的初始化似乎比实际执行脚本花费的时间要长得多。

因此,我开始寻找一种在运行之前将其编译为字节码的简单方法。似乎 B::Bytecode 是执行此操作的唯一功能方式,不再维护或包含在主要 Perl 发行版中。有什么简单的方法可以减少启动时间吗?

谢谢!

perl bytecode regexp-grammars

5
推荐指数
1
解决办法
579
查看次数

Regexp :: Grammars中不区分大小写的哈希键

在perl模块Regexp :: Grammars中,考虑以下标记:

<token: command>       <%commands>
Run Code Online (Sandbox Code Playgroud)

此标记是复杂语法的一部分,可解析各种不同的句子。

该令牌与哈希%commands中的任何单词匹配,我已定义如下(当然,在任何函数之外):

our %commands = (
    'Basic_import'  => 1,
    'Wait'          => 1,
    'Reload'        => 1,
    'Log'           => 1,
); 
Run Code Online (Sandbox Code Playgroud)

这适用于匹配“ Basic_import”,“ Wait”等关键字,但是,我也希望它与“ basic_import”,“ wait”等字匹配。

如何使此哈希大小写不敏感,而不必多次复制和粘贴每个关键字?因为这是复杂语法的一部分,所以我想使用Regexp :: Grammars,并且我不希望不必针对此特殊异常恢复为grep。

regex perl regexp-grammars

5
推荐指数
2
解决办法
115
查看次数

是否有像perl的Regexp :: Grammars或.NET中标记的子模式?

我真的很喜欢perl的Regexp :: Grammars模块..NET有这样的东西吗?

我真的想在C#中以正则表达式的方式使用递归下降解析器(例如,通过大文档搜索匹配的模式),并且能够递归地表达该模式.

更新从brian d foy 读取这个小宝石之后,我发现perl 5.10支持使用(?和NAME)标记的子模式.PCRE现在有一个Nuget包,PCRE支持命名/标记的子模式.

.net regex perl regexp-grammars

4
推荐指数
1
解决办法
172
查看次数

Perl:正则表达式在重复模式之间获取所有文本

我想为以下内容创建一个正则表达式.

我有一些如下文字:

field = "test string";
type =  INT;
funcCall(.., field, ...);
...
text = "desc";

field = "test string 1";
type = FLOAT;
funcCall(.., field, ...);
...
text = "desc 2";

field = "test string 2";
type = FLOAT;
funcCall(.., field, ...);
...
text = "desc 3";

.... keeps repeating
Run Code Online (Sandbox Code Playgroud)

基本上我正在尝试创建一个正则表达式,它将从第一个"field ="的开头到第二个"field ="的开头获取所有文本.它必须跳过函数调用中使用的字段文本.

我目前有以下内容:

my @overall = ($string =~ m/field\s*=.*?/gis);
Run Code Online (Sandbox Code Playgroud)

但是,这只是获得文本"field =".没有"?" 它从第一个到最后一个实例获取所有数据.

我也尝试过:

my @overall = ($string =~ m/field\s*=.*field\s*=/gis);
Run Code Online (Sandbox Code Playgroud)

然而,这将使我得到所有其他实例,因为它占有第二个"field ="字符串.有什么建议?

regex perl parsing regexp-grammars

4
推荐指数
2
解决办法
987
查看次数

Perl6:将Match对象转换为JSON可序列化Hash

我现在开始在一些Perl6上弄脏手.具体来说,我正在尝试编写基于语法的Fortran解析器(Fortran :: Grammar模块)

出于测试目的,我希望有可能将Match对象转换为JSON可序列化Hash.

谷歌搜索/ 官方Perl6文档没有帮助.如果我忽视某些事情,我道歉.

到目前为止我的尝试:

  • 我知道可以将a转换Match $mHashvia $m.hash.但这会保留嵌套Match对象.
  • 由于这只是要通过递归解决的,我试过,但有利于给先询问一种更简单的/现有解决方案是否存在等在这里了
  • 处理Match对象的内容显然最好通过make/ 来完成made.我希望有一个超级简单的Actions对象,用于所有匹配.parse默认方法,基本上只是做一个make $/.hash或类似的东西.我根本不知道如何指定默认方法.

testing json perl6 regexp-grammars

4
推荐指数
1
解决办法
217
查看次数

标签 统计

regexp-grammars ×7

perl ×5

regex ×4

perl6 ×2

.net ×1

bytecode ×1

json ×1

latex ×1

parsing ×1

testing ×1