我想在PHP中测试正则表达式的有效性,最好在它使用之前.这样做的唯一方法是尝试preg_match()
并查看它是否返回FALSE
?
有没有更简单/正确的方法来测试有效的正则表达式?
在Java中,我可以使用以下函数来检查字符串是否是有效的正则表达式:(来源:如何检查字符串是否是正则表达式)
boolean isRegex;
try {
Pattern.compile(input);
isRegex = true;
} catch (PatternSyntaxException e) {
isRegex = false;
}
Run Code Online (Sandbox Code Playgroud)
是否有一个python相当于Pattern.compile()
和PatternSyntaxException
?如果是这样,它是什么?
如果字符串是PHP中的正则表达式或普通字符串,是否有一种好的测试方法?
理想情况下,我想编写一个函数来运行字符串,返回true或false.
我看了看preg_last_error()
:
<?php
preg_match('/[a-z]/', 'test');
var_dump(preg_last_error());
preg_match('invalid regex', 'test');
var_dump(preg_last_error());
?>
Run Code Online (Sandbox Code Playgroud)
显然,第一个不是错误,第二个是错误.但两次preg_last_error()
返回int 0
.
有任何想法吗?
我正在阅读这个问题中的一些回答,并看到有些人说递归正则表达式并不严格地讲正则表达式.
为什么是这样?
我有一个应用程序,使用户能够输入正则表达式.如何检查正则表达式的任何输入并确保它们是有效的,因为如果它们不存在则会出现preg_match错误?
我不想在preg_match之前使用'@',所以如果有办法检查正则表达式的用户输入的有效性,那就太好了.
PHP的正则表达式系统对我来说似乎太复杂了,无法为它们提供正则表达式.
有没有人有代码来查找包含正则表达式的文件?我想你可以有两种不同的口味,一种用于BRE,一种用于ERE.
你会认为某种测试套件会有像isRegex()测试那样的东西.任何人都可以有任何代码?当然,寻找一些全面的东西.
我看到这里讨论了这个,但没有看到任何实际的回应.如果我想grep任何包含正则表达式的文件,可能是以典型的//为界,我该怎么做?
我正在阅读正则表达式解析器的代码,并开始怀疑正则表达式的语法本身是否是常规的,并且可以用另一个(非常复杂的)正则表达式表达?
rere = "" # the regular expression of regular language
match1 = re.match(rere, "[a-z]+@[a-z]+.com") # True
match2 = re.match(rere, ")az[") # False
Run Code Online (Sandbox Code Playgroud)
我没有在正则表达式语法中看到任何递归结构,所以我想也许这是可行的?
如果是,表达式是什么样的?如果没有,为什么?
这个问题是我最近一直在思考的问题.编程语言可以用该语言编写,作为第二种实现吗?例如Java.是否可以使用java编程语言重写java编程语言?
抱歉,如果这是一个愚蠢的问题,但我需要知道!
GF
我希望能够验证用户输入的正则表达式,以检查它是否有效.我发现PHP的第一件事是filter_var
使用FILTER_VALIDATE_REGEXP
常量,但这并不是我想要的,因为它必须将正则表达式传递给选项,但我不是正则对抗任何东西,所以基本上它只是检查正则表达式的有效性.
但是你明白了,如何验证用户输入的正则表达式(与之匹配).
验证的例子,简单来说:
$user_inputted_regex = $_POST['regex']; // e.g. /([a-z]+)\..*([0-9]{2})/i
if(is_valid_regex($user_inputted_regex))
{
// The regex was valid
}
else
{
// The regex was invalid
}
Run Code Online (Sandbox Code Playgroud)
验证示例:
/[[0-9]/i // invalid
//(.*)/ // invalid
/(.*)-(.*)-(.*)/ // valid
/([a-z]+)-([0-9_]+)/i // valid
Run Code Online (Sandbox Code Playgroud) 我正在研究一个特殊的正则表达式来匹配一个javascript正则表达式.
现在我有这个正则表达式工作:
Run Code Online (Sandbox Code Playgroud)/\/(.*)?\/([i|g|m]+)?/
例如:
'/^foo/'.match(/\/(.*)?\/([i|g|m]+)?/) => ["/^foo/", "^foo", undefined]
'/^foo/i'.match(/\/(.*)?\/([i|g|m]+)?/) => ["/^foo/i", "^foo", "i"]
Run Code Online (Sandbox Code Playgroud)
现在我需要使用这个正则表达式:
'^foo'.match(/\/(.*)?\/([i|g|m]+)?/) => ["^foo", "^foo", undefined]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我以前的正则表达式不适用于那个.
有人可以帮我找到匹配这个例子的正则表达式(以及其他人):
'^foo'.match([a regex]) => ["^foo", "^foo", undefined]
Run Code Online (Sandbox Code Playgroud) regex ×9
php ×4
validation ×2
grep ×1
java ×1
javascript ×1
parsing ×1
pcre ×1
preg-match ×1
python ×1
recursion ×1
string ×1