php - 用 preg_match() 匹配括号

标签 php regex preg-match pcre

<分区>

Possible Duplicate:
Regex for checking if a string has mismatched parentheses?

我正在尝试编写一个正则表达式来仅匹配一串数字,可选地括在括号中(正则表达式还必须检查括号是否正确关闭,即它们是否存在于 pars 中)。 所以所有这些都应该被正则表达式认为是有效的: 1234567 123(45​​)6 (123)(456)

我想出了这个使用条件模式(注意我使用空格所以需要 x 修饰符来让它忽略空格):

$val = "(123)";
$regex = "^( (\()? [0-9]+ (?(2)\)) )+$";
$ret = preg_match("/{$regex}/x", $val, $matches);

然而,尽管它正确匹配了上面的“(123)”,它也匹配了下面它不应该匹配的: “(123)45)”(第二个数字只有右括号)

有人可以帮忙吗?

注意:不允许嵌套括号

最佳答案

假设括号不能嵌套,您可以将括号中的数字视为单个数字来实现:

([0-9]|\([0-9]+\))*

关于php - 用 preg_match() 匹配括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636225/

相关文章:

php - fatal error : Uncaught Error: Call to a member function bindParam() on string i

php - 缓存与。在 Laravel 中直接从数据库查询

python - 使用正则表达式获取列表的第一个元素

php - preg_match() [function.preg-match] : Unknown modifier

php - 字符串中的 URL 检测

php - 如何使用 URL 检查 smarty 上是否存在图像文件?

php - postgresql 有 PHP mysql_real_escape_string 吗?

java - 如何创建正则表达式模式来验证android中的edittext?

javascript - 在替换中使用 Javascript 非捕获组

php - 用户名正则表达式字母数字,仅带下划线