是否可以生成与正则表达式字符串匹配的字符串?

Posted

技术标签:

【中文标题】是否可以生成与正则表达式字符串匹配的字符串?【英文标题】:Is it possible to generate strings that match a regular expression string? 【发布时间】:2012-06-06 23:33:11 【问题描述】:

是否可以显示匹配正则表达式的字符串?

例子:

取表达式/^AD\d3/ 并显示AD999

我正在做的是验证一个非常简单的字符串,或者包含所有数字,可能包含几个字符,也可能包含一个“-”。我正在根据所有使用邮政编码的国家/地区的数据库验证表单提交上的邮政编码。

我可以用 javascriptphp 来执行它,如果这有什么不同的话。

【问题讨论】:

一般来说,有很多字符串匹配一个正则表达式——至少,对于任何有用的正则表达式。您想使用什么标准来决定应该显示多个匹配字符串中的哪一个? 您怎么会知道来自/^AD\d3/ 的是 AD999 而不是 AD001? 他只是想显示一个有效输入的例子。 我看不出 -1 的原因。 你会为\d5,8([c-fF-M]+.)? 插入什么?您想要显示的内容几乎肯定取决于比正则表达式本身更大的上下文。 【参考方案1】:

没有。这种功能不可用。

您可以尝试自己实现它,但我认为这不是您的解决方案。只需正常编写消息即可。并非一切都必须始终是动态的。

我喜欢你的思维方式。

【讨论】:

我只是想如果我可以反转它,它将节省数据库中的另一个字段。 为什么数据库中有另一个字段有问题? 没问题,当我建立的数据库包含世界上每个使用邮政编码的国家/地区时,工作量很大。 @Philip 您生成的信息越多,在需要重构时需要更改的内容就越少。【参考方案2】:

从您的附加 cmets 中,我对您的问题有了更好的理解。

由于您的数据只是邮政编码,我建议可以朝另一个方向工作,将图片存储在数据库中,然后自动生成正则表达式。

例如,英国邮政编码看起来像AA?99? 9AA | AA?9A 9AA,很容易转换为正则表达式(使用正则表达式!)。

【讨论】:

或者更一般地说,有一种特定领域的语言,您可以从中生成示例和正则表达式。顺便说一句,SAN 1TA 是一个有效的英国邮政编码,用于儿童向圣诞老人寄信,还有一些其他奇怪的例子。您是否愿意接受表格上的内容是另一个问题。 小心 - 它是SAN TA1。你不希望那些信误入歧途!【参考方案3】:

有可能。 developers of PEX figured it out。

别抱太大希望,我不知道任何 javascript 实现。

【讨论】:

链接已损坏,但请参阅下面的 Pepijn 答案以获得非常好的 JavaScript 实现【参考方案4】:

现在有一个用于 javascript 的:http://fent.github.io/randexp.js/。

【讨论】:

这非常有效,在我看来应该是最佳答案,非常感谢

以上是关于是否可以生成与正则表达式字符串匹配的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

输出导致与正则表达式不匹配的第一个字符

如何检测两个正则表达式在它们可以匹配的字符串中是不是重叠?

正则re

unix:如何判断字符串是否与正则表达式匹配

与正则表达式匹配时是不是可以忽略字符串中的字符

Python 正则表达式