小编Pet*_*ter的帖子

如何为正则表达式集合找到"最小生成集"?

背景:

我有一个小的(目前不到100个)但正在增长的正则表达式集合,我想优化确定给定文本字符串的过程我的集合中哪些RE与文本字符串匹配.

一些RE有一个排序关系 - 例如,如果我知道字符串$ t匹配/ windows/i,那么我也知道$ t匹配/windows.*2000/i.因此,当我对我的集合中的RE测试$ t时,我可以跳过测试/ windows/i,如果我已经针对/windows.*2000/i测试了$ t并找到了匹配(尽管如果/windows.*2000/i确实如此)匹配当然我不能跳过对/ windows/i的测试.

请注意,我的集合中的所有RE都不是完全等效的(对于任何一对RE,至少有一个匹配一个的文本字符串与另一个匹配).

战略:

我想构建一个有向图G,其中有一个节点用于我的集合中的每个RE,并且每对RE的有向边具有排序关系(A - > B表示"匹配A意味着与B匹配"),并找到一个图的节点的"最小生成集"(节点S的最小集合,使得G中的每个节点位于源自S的有向路径上).

简单的部分:

有很多免费的算法可用于定向非循环图.因此,一旦为我的RE集合构建了图形G(这是不同的,应该保证G是非循环的),我不希望找到一个合适的算法来寻找G的最小生成集.

在哪里我需要帮助:

我想找到一种有效的方法来查找我的集合中的RE之间的所有排序关系 - 也许还要确保集合中没有两个RE是等价的(我需要一种方法来自动验证这个,因为新的RE是添加).

因此,我的(基本上是随机的)网络搜索至少提出了一个合理的说法,即确定两个RE之间存在什么(如果有的话)排序关系的合理方法确实存在,但尚未发现任何完整算法的描述.

有没有人知道现有的实现(用于比较RE),这些实现是合理有效的,可免费获得的,并且(理想情况下)是用一种流行的脚本语言或C/C++实现的?

regex performance partial-ordering minimum-spanning-tree

6
推荐指数
1
解决办法
614
查看次数

是否有针对The Go语言的SAML库?

我看到goauthgo-oauth OAuth库是为Go编程语言编写的,但是几个小时的在线搜索没有为SAML编写任何内容.

我想使用Go来实现使用SAML进行Web服务的SSO支持,但是没有用于Go的SAML库,我看起来必须将SAML逻辑"包装"在一个单独的服务中,用另一种语言实现.

有没有人知道Go-friendly SAML库,或者是一些使用Go程序中的Java,C或PHP库的技巧?

go saml-2.0

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

CodeSniffer嗅探用于为PHP代码生成依赖图?

目标: 我对在PHP 程序中生成类依赖项的DOT 格式描述感兴趣。

IDEA: 编写一个 CodeSniffer“嗅探”应该不难,它可以检测(并发出 DOT 记录)PHP 源代码中的以下模式:

class SomeClassName extends BasicClassName {  // SomeClassName refers to BasicClassName
...
    new OtherClassName();            // SomeClassName refers to OtherClassName
    ThisClassName::some_method();    // SomeClassName refers to ThisClassName
    ThatClassName::$some_member;     // SomeClassName refers to ThatClassName
    RandomClassName::some_constant;  // SomeClassName refers to RandomClassName
...
}
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到任何发布的嗅探来发出这些信息(以及任何其他表明我可能错过的“真实”类依赖关系的模式)。

注意: 我特别关心 PHP 的 include() 和 require() 语句(我不相信它们的行为甚至是明确定义的)。出于这个问题的目的,我们假设所有 PHP 类解析都是通过自动加载处理的,并且我们希望仅使用静态代码分析来构建类依赖关系图。

编辑: 不幸的是,我看不到处理以下问题的一般方法:

class ThatClassName {
...
    function generateClassName() {
        // something too complicated …
Run Code Online (Sandbox Code Playgroud)

php static-analysis codesniffer

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

为什么PHPUnit会为明显相同的字符串给我一个assertEquals失败?

以下脚本演示了文档(在标题注释中),即我无法检测到"expected"和"actual"字符串之间的任何区别:

<?php

/*
$ phpunit MyTest.php
PHPUnit 3.4.0 by Sebastian Bergmann.

F

Time: 0 seconds

There was 1 failure:

1) MyTest::test_print_r
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}
+O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}

.../MyTest.php:41
.../bin/phpunit:54

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
*/

class MyClass {
    static protected $var2;
    private $var3;
    public $var1;

    public function foo($item) {
        echo $item . "\n";
    }
}

class MyTest extends PHPUnit_Framework_TestCase {
    function test_print_r() {
        $m = new MyClass();
        $this->assertEquals(trim('O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}'), trim(serialize($m))); …
Run Code Online (Sandbox Code Playgroud)

php phpunit

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