Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php预赛噩梦_Php_Regex_Preg Match - Fatal编程技术网

php预赛噩梦

php预赛噩梦,php,regex,preg-match,Php,Regex,Preg Match,我就是想不通regex,谢谢你的帮助 我有大量的字符串数据,可能包含也可能不包含字符串“1/10”或“2/10”或“2/18”等。基本上,分子和分母都可能不同。为了让事情变得更复杂,一些数据输入操作符可能在分子和分母之间的任何位置都放置了一个空格!! 因此,我的投入可以是: “x/y”或“x/y”或“x/y”或“x/y”或“x/y”。。。。可能还有更多的组合:( 在这些情况下,我想确定x和y是否是数字,它们之间是否有一个“/”斜杠。我在regex没有希望,请帮助 我是用php编码的,我想preg

我就是想不通regex,谢谢你的帮助

我有大量的字符串数据,可能包含也可能不包含字符串“1/10”或“2/10”或“2/18”等。基本上,分子和分母都可能不同。为了让事情变得更复杂,一些数据输入操作符可能在分子和分母之间的任何位置都放置了一个空格!! 因此,我的投入可以是: “x/y”或“x/y”或“x/y”或“x/y”或“x/y”。。。。可能还有更多的组合:(

在这些情况下,我想确定x和y是否是数字,它们之间是否有一个“/”斜杠。我在regex没有希望,请帮助

我是用php编码的,我想preg_match是需要使用的。 谢谢你的阅读

if(preg_match('~^[0-9]+\s*/\s*[0-9]+$~',trim($subject))) {
  // valid
} 
产出:

PASS: n:1, d:2
PASS: n:13, d:100
PASS: n:23, d:90
PASS: n:7, d:123
PASS: n:24, d:25
FAIL: 1a/2b

我认为您应该不惜任何代价避免使用regexp。有几个案例您应该(可以):

  • 您是regexp方面的专家。如果您是,那么您可能应该使用regexp,因为它可能会更快、更简洁。尽管在我看来可读性会很差
  • 您需要提高性能
否则我的建议是不要使用它

在上述任何情况下,我希望 确定x和y是否为数字,以及 如果它们之间有一条“/”斜线。 我在regex没有希望了,请帮忙

如何解决您的问题:

<?php

class Verify {
    public static function numbers($str) {
        $explode = explode("/", $str);

        foreach($explode as $elm) {
            if (!filter_var($elm, FILTER_VALIDATE_INT)) {
                return false;
            }
        }
        return true;
    }
}
class StackTest extends PHPUnit_Framework_TestCase {
    public function testBothPartsAreNumbers() {
        $array = array(
            "1/2",
            "1 / 2",
            "1/ 2",
            "1 /2"
        );
        foreach($array as $elm) {
            $this->assertTrue(Verify::numbers($elm));
        }
    }

    public function testOneOfThemMightBeNotANumber() {
        $array = array(
            "1/a",
            "a/1",
            "1 / a",
            "b/2",
            "b/a",
            "1/2.1",
        );
        foreach($array as $elm) {
            $this->assertFalse(Verify::numbers($elm));
        }
    }
}
?>

查看中列出的一些工具,这些工具可能有助于您开始和设计正则表达式。1.2/4.2也必须匹配吗?没有Hamish,幸运的是我没有分数:)谢谢,这很有效,但前提是我的字符串只包含x/y变量。谢谢,这很有效,但仅当我的字符串只包含x/y变量时。要使其与任何包含x/y变量的字符串匹配,请删除
^
$
。他们的意思是-分别是弦的开始和结束。太棒了,完美了!这是您给出的一个很酷的测试用例:)
PASS: n:1, d:2
PASS: n:13, d:100
PASS: n:23, d:90
PASS: n:7, d:123
PASS: n:24, d:25
FAIL: 1a/2b
<?php

class Verify {
    public static function numbers($str) {
        $explode = explode("/", $str);

        foreach($explode as $elm) {
            if (!filter_var($elm, FILTER_VALIDATE_INT)) {
                return false;
            }
        }
        return true;
    }
}
class StackTest extends PHPUnit_Framework_TestCase {
    public function testBothPartsAreNumbers() {
        $array = array(
            "1/2",
            "1 / 2",
            "1/ 2",
            "1 /2"
        );
        foreach($array as $elm) {
            $this->assertTrue(Verify::numbers($elm));
        }
    }

    public function testOneOfThemMightBeNotANumber() {
        $array = array(
            "1/a",
            "a/1",
            "1 / a",
            "b/2",
            "b/a",
            "1/2.1",
        );
        foreach($array as $elm) {
            $this->assertFalse(Verify::numbers($elm));
        }
    }
}
?>
alfred@alfred-laptop:~/php/stackoverflow/4916920$ php -v
PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:08:14) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

# We need at least PHP5.2 for filter.

alfred@alfred-laptop:~/php/stackoverflow/4916920$ phpunit NumberTest.php 
PHPUnit 3.5.10 by Sebastian Bergmann.

..

Time: 0 seconds, Memory: 3.50Mb

OK (2 tests, 10 assertions)