【问题标题】:Simple PHP regular expression question简单的PHP正则表达式问题
【发布时间】:2023-03-31 14:49:01
【问题描述】:

以下最有效的preg_match 正则表达式是什么:

  1. 正则表达式必须匹配某个字符串(不区分大小写
  2. 后面可以跟 [ 或 ; 然后别的东西

这些是“foo”的测试用例:

  • foo --> 好
  • 食物 --> 不好
  • 富; --> 不好,后面需要一些东西;
  • FOO;bar --> 好
  • foo[bar] --> 好
  • foo[ --> 不好,在 ]​​i> 之后需要一些东西
  • fOo[bar]1;2;3 --> 好

这是我的测试代码:

<?php

$tests = array();
$tests[] = 'foo';
$tests[] = 'food';
$tests[] = 'foo;';
$tests[] = 'FOO;bar';
$tests[] = 'foo[bar]';
$tests[] = 'foo[';
$tests[] = 'foo[]';
$tests[] = 'fOo[bar]1;2;3';

foreach ($tests as $test)
{
    echo $test, ' --> ';
    $found = preg_match('REGULAR EXPRESSION HERE', $test);
    if ($found === false || $found < 1)
        echo 'bad';
    else
        echo 'ok';
    echo '<br>', PHP_EOL;
}

?>

【问题讨论】:

  • 你试过阅读正则表达式的教程/信息吗?看起来像是一项家庭作业,我建议您自己阅读并找到答案,从长远来看,它会对您有所帮助。
  • 关于php语法的Idk,但python会匹配foo([|;)(.*)
  • @premiso 我 8 年前就已经毕业了(谢天谢地),我知道这很简单,但我讨厌正则表达式并尽量避免使用它们。我正在慢慢学习它们,但仍然:) 我仍然需要找到一个关于它们的好网站。我所有的都过于复杂......
  • regular-expressions.info « 这是一个关于正则表达式的好网站。
  • 我看到你对正则表达式提出了很多问题,请允许我向你推荐这个:amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/…

标签: php regex


【解决方案1】:

你可以试试这个正则表达式:

/foo(;.+?|\[.+?\].*?)*$/i

如果你的括号不需要关闭:

/foo([;\[].+?)*$/i

如果你的括号或分号不能是表达式的最后一部分:

/foo([;\[][^;\[]+)*$/i

全部通过Regex planet的测试。


资源:

【讨论】:

  • @Activist,很奇怪,你能显示你的代码和你使用的正则表达式吗?
  • @Colin HEBERT 向 OP 添加了测试代码。只需使用经过测试的正则表达式更改“此处的正则表达式”。你的 3 个都不符合我的预期结果。
  • 您是否在将 \ 放入字符串之前对其进行了转义?你应该有这个:$returnValue = preg_match('/foo(;.+?|\\\[.+?\\\].*?)*$/i', 'foo;');
  • @Colin HEBERT 是的,我知道,但仍然是 foo;和 foo[ 在正常时被标记为坏...
  • 嗯,从你的第一篇文章开始:“foo; --> 糟糕,需要一些东西;”和 "foo[ --> 不好,在 ] 之后需要一些东西"
【解决方案2】:

简单:

/foo($|[[;].)/i

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多