相关疑难解决方法(0)

使用Regex生成字符串而不是匹配它们

我正在编写一个Java实用程序,它可以帮助我生成大量数据以进行性能测试.这将是真的很酷,能够让自己的发电机吐出来匹配这个哪些事情来指定字符串正则表达式.有什么东西已经烘烤,我可以用它来做到这一点?或者是否有一个图书馆让我在那里大部分时间?

谢谢

java regex

100
推荐指数
5
解决办法
7万
查看次数

用于确定两个Glob模式(或正则表达式)的匹配是否相交的算法

我正在寻找类似于Redis KEYS命令所接受的匹配的glob样式模式.引用:

  • h?llo匹配hello,hallo和hxllo
  • h*llo匹配hllo和heeeello
  • h [ae] llo匹配hello和hallo,但不匹配hillo

但是我没有匹配文本字符串,而是将模式与另一个模式匹配,所有运算符都在两端都有意义.

例如,这些模式应该在同一行中相互匹配:

prefix*       prefix:extended*
*suffix       *:extended:suffix
left*right    left*middle*right
a*b*c         a*b*d*b*c
hello*        *ok
pre[ab]fix*   pre[bc]fix*
Run Code Online (Sandbox Code Playgroud)

这些不应该匹配:

prefix*       wrong:prefix:*
*suffix       *suffix:wrong
left*right    right*middle*left
pre[ab]fix*   pre[xy]fix*
?*b*?         bcb
Run Code Online (Sandbox Code Playgroud)

所以我想知道......

  • 如果可以这样做(实施验证算法),如果有的话?
  • 如果不可能,正则表达式的哪个子集是可能的?(即禁止*通配符?)
  • 如果它确实可能,什么是有效的算法?
  • 需要什么时间复杂度?

编辑:在RegEx子集上找到这个其他问题,但这与单词hello**ok匹配不是彼此的子集/超集的单词不完全相同,但它们相交.

所以我想从数学角度来看,这可能是用来表达的; 是否有可能确定地检查一个模式匹配的一组单词与另一个模式匹配的一组单词相交,导致非空集?


编辑:朋友@neizod绘制了这个消除表,它可以整齐地显示可能是潜在/部分解决方案:消除规则


编辑:将为那些也可以提供工作代码(使用任何语言)和测试用例证明它的人增加额外的奖励.


编辑:添加?*b*?@DanielGimenez在评论中发现的测试用例.

regex algorithm string-matching

30
推荐指数
4
解决办法
2752
查看次数

检查一个正则表达式是否包含另一个正则表达式

我正在尝试实现文本聚类算法.该算法通过用正则表达式替换它们来聚类相似的原始文本行,并聚合与每个正则表达式匹配的模式的数量,以便提供输入文本的简洁摘要,而不是显示来自输入文本的重复模式.在这次尝试中,我遇到了寻找一个正则表达式是否覆盖另一个正则表达式的需要.

假设我们关注约与"*"和"+"外卡,即"*"意味着一个字母的零个或多个字符的字符串,而"+"代表一个字母的1点或多个正好正则表达式.还假设字符集为ASCII.

例如:

1. AB covers AB
      This is straightforward.
2. ABC* covers ABC
      Because ABC* can generate: ABC, ABCC, ABCCC etc.
3. A*B+C* covers AB+C*
      Because A*B+C* can generate ABBC, AABBC, AABBCC etc. which covers
      all strings generated by AB+C*.
4. A+M+BC* covers AMM+B+C+M+BC*
      Similar to case [3] above.
Run Code Online (Sandbox Code Playgroud)

基本上我正在寻找以下方法的有效实现,该方法告诉strA(可能包含正则表达式)是否覆盖了strB(可能包含正则表达式).请注意,还应该有一种方法可以在输入字符串strA和strB中转义正则表达式字符'*'和'+'.

C++中的方法签名:

bool isParentRegex(const string& strA, const string& strB)
Run Code Online (Sandbox Code Playgroud)

我的想法是实现需要一个递归方法,它可能有点复杂.但我很想知道我是否可以重用现有的实现而不是重新发明轮子,或者是否有任何其他直接的方法来实现它.

c++ regex cluster-analysis data-mining

8
推荐指数
1
解决办法
300
查看次数

检测两个正则表达式是否可能匹配相同的字符串

给定两个正则表达式,是否可以检测是否存在与它们匹配的任何可能的字符串?

例如,给定的正则表达式A.,我可以看到这个字符串"A"匹配他们俩.这是一个简单的案例.

我的问题是针对更广泛的情况 - 给定任何两个有效的正则表达式,是否有可能明确地说是否有任何可能的字符串与两个正则表达式相匹配?假设没有要测试的输入字符串样本集.我只有正则表达式.我不一定需要生成匹配的字符串 - 我只需要确定有可能的字符串匹配两者.

将接受任何常见正则表达式规范的讨论 - .NET,Java,PERL,sed,grep等.

regex

7
推荐指数
1
解决办法
741
查看次数

Python:检查一个正则表达式是否覆盖另一个正则表达式

我正在尝试检查一个正则表达式是否覆盖Python 2.7中的另一个正则表达式。

例如,我有以下表达式:

([a-z]+\.\d+(\.\d+)?)?
Run Code Online (Sandbox Code Playgroud)

我想知道它是否包含以下表达式之一:

([a-z]+\.[0-9])?         (covers)
([0-9]+\.\d+(\.\d+)?)?   (does not cover)
([a-z]|[0-9])?           (does not cover)
Run Code Online (Sandbox Code Playgroud)

是否可以检查一个正则表达式是否覆盖另一个正则表达式?如果可能的话,您对如何实现这一点有建议吗?

python regex

6
推荐指数
0
解决办法
54
查看次数

OCaml:如何测试我自己的正则表达式库

我创建了一个简单的正则表达式引擎,它支持连接,交替,闭包和char a .. z.

我代表nfa和dfa的方式是使用记录:

type state       = int with sexp, compare
type alphabet    = char with sexp, compare
type transaction = state * alphabet option * state with sexp, compare
type d_transaction = state * alphabet * state with sexp, compare

type state_set = State_set.t
type states_set = States_set.t

type nfa = {
  states       : State_set.t ;
  alphabets    : Alphabet_set.t ;
  transactions : Transaction_set.t; 
  start_state  : state;
  final_states : State_set.t;
}


type dfa = {
  d_states       : State_set.t …
Run Code Online (Sandbox Code Playgroud)

regex testing ocaml unit-testing

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

有没有办法检查两个正则表达式是否可以匹配相同的字符串?

我有两个正则表达式。我需要确定是否有可能同时构建与这两个正则表达式匹配的给定长度的字符串。我需要算法来做到这一点。

字符串的长度不能超过20个字符。

algorithm

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

匹配两个正则表达式

我想在Python中比较两个正则表达式.

基本上,我需要测试一个表达式是否包含在另一个表达式中.

例如,[AB] D包含在[AB] [CD]中.或......是...... K ..包括在...... [KR] ..

我试过类似下面的东西,但它不起作用:

re.finditer(r"[AB][DF]",r"[AB]D")
re.finditer(r"[AB]D",r"[AB][CD]")
Run Code Online (Sandbox Code Playgroud)

我的表达式可以有不同的大小,但具有相同大小表达式的解决方案会很棒.

编辑

我所有的正则表达都很简单.

它们只包含"点","方形布料"和"^".

.表示"任何东西"(如真正的正则表达式中的*)
[AB]表示"A或B"
[^ P]表示"不是P"

编辑2

感谢您的回答和评论,我想我将从一个正则表达式生成所有字符串的集合,并使用第二个正则表达式测试它们.

python regex

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