标签: preg-match-all

有没有办法在preg_replace_callback回调函数中传递另一个参数?

嗯伙计们,我真的希望我的英语能很好地解释我的需要.

让我们举个例子(这只是一个例子!)代码:

class Something(){
    public function Lower($string){
        return strtolower($string);
    }
}
class Foo{
    public $something;
    public $reg;
    public $string;
    public function __construct($reg, $string, $something){
        $this->something = $something;
        $this->reg = $reg;
        $this->string = $string;
    }
    public function Replace(){
        return preg_replace_callback($this->reg, 'Foo::Bar', $this->string);
    }
    public static function Bar($matches){
        /*
        * [...]
        * do something with $matches and create the $output variable
        * [...]
        */

        /*
        * I know is really useless in this example, but i need to have an …
Run Code Online (Sandbox Code Playgroud)

php preg-replace preg-replace-callback preg-match-all preg-match

9
推荐指数
2
解决办法
1万
查看次数

使用php从字符串开始和结束获取所有匹配项

我将如何使用PHP之间提取的一切[startstring],并[endstring]从该字符串:

[startstring]hello = guys[endstring] hello guys [startstring]jerk = you[endstring] welcome to the universe
Run Code Online (Sandbox Code Playgroud)

我想找到的所有比赛[startstring],并[endstring]和echo中的文本.有点像分界符.而且我希望所有的比赛都被空间分开.

我将如何实现这一目标?这需要regex吗?你能提供样品吗?

非常感谢!:)

php regex preg-match-all preg-match

9
推荐指数
1
解决办法
2万
查看次数

从字符串中获取电子邮件 - 正则表达式语法+ preg_match_all

我正试图从字符串中获取电子邮件.

$string = "bla bla pickachu@domain.com MIME-Version: balbasur@domain.com bla bla bla";
$matches = array();
$pattern = '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b';
preg_match_all($pattern,$string,$matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:分隔符不能是字母数字或反斜杠

http://www.regular-expressions.info/email.html获取正则表达式语法

我该怎么办?提前致谢!

php regex preg-match-all preg-match

9
推荐指数
1
解决办法
2万
查看次数

php从字符串中获取数字

我有这个字符串

@ [123:peterwateber]你好095032sdfsdf!@ [589:ZZZZ]

我想得到123和589你是如何使用正则表达式或PHP中的东西?

注意:peterwateber和zzzz就是例子.应该考虑任何随机字符串

php regex preg-match-all preg-match

7
推荐指数
1
解决办法
2211
查看次数

PHP/REGEX:在括号内获取一个字符串

这是一个非常简单的问题,但我无法在任何地方找到解决方案.

我尝试使用preg_match或preg_match_all从括号内获取字符串,但没有括号.

到目前为止,我的表达式如下:

\([A-Za-z0-9 ]+\)
Run Code Online (Sandbox Code Playgroud)

并返回以下结果:

3(空心高亮)928-129(< - 原始字符串)

(空心高亮)(< - 结果)

我想要的是括号内的字符串,但没有括号.它看起来像这样:

镂空亮点

我之后可能用str_replace或其他东西替换括号,但这对我来说似乎不是一个非常优雅的解决方案.

我需要添加什么,所以括号不包含在结果中?

谢谢你的帮助,你们真棒!:)

php regex preg-match-all preg-match

7
推荐指数
2
解决办法
3万
查看次数

preg_match_all成简单数组

我有preg_match_all函数:

preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但问题是,它preg_matches所有项目两次,并进入一个巨大的多维数组,例如,如预期的那样,preg_matched所有11项所需,但两次,并进入一个多维数组:

Array
(
    [0] => Array
        (
            [0] => <h2>10. <em>Cruel</em> by St. Vincent</h2>
            [1] => 10. <em>Cruel</em> by St. Vincent
        )

    [1] => Array
        (
            [0] => <h2>9. <em>Robot Rock</em> by Daft Punk</h2>
            [1] => 9. <em>Robot Rock</em> by Daft Punk
        )

    [2] => Array
        (
            [0] => <h2>8. <em>Seven Nation Army</em> by the White Stripes</h2>
            [1] => 8. <em>Seven Nation Army</em> by the White Stripes
        )

    [3] => Array
        (
            [0] => <h2>7. …
Run Code Online (Sandbox Code Playgroud)

php arrays pcre preg-match-all multidimensional-array

7
推荐指数
1
解决办法
1万
查看次数

PHP:在逗号上拆分字符串,但不是在大括号或引号之间?

在PHP中,我有以下字符串:

$str = "AAA, BBB, (CCC,DDD), 'EEE', 'FFF,GGG', ('HHH','III'), (('JJJ','KKK'), LLL, (MMM,NNN)) , OOO"; 
Run Code Online (Sandbox Code Playgroud)

我需要将此字符串拆分为以下部分:

AAA
BBB
(CCC,DDD)
'EEE'
'FFF,GGG'
('HHH','III')
(('JJJ','KKK'),LLL, (MMM,NNN))
OOO
Run Code Online (Sandbox Code Playgroud)

我尝试了几个正则表达式,但找不到解决方案.有任何想法吗?

UPDATE

我决定使用正则表达式并不是最好的解决方案,在处理格式错误的数据,转义报价等时.

感谢在这里提出的建议,我找到了一个使用解析的函数,我根据自己的需要重写了这个函数.它可以处理不同类型的支架,分隔符和报价也是参数.

 function explode_brackets($str, $separator=",", $leftbracket="(", $rightbracket=")", $quote="'", $ignore_escaped_quotes=true ) {

    $buffer = '';
    $stack = array();
    $depth = 0;
    $betweenquotes = false;
    $len = strlen($str);
    for ($i=0; $i<$len; $i++) {
      $previouschar = $char;
      $char = $str[$i];
      switch ($char) {
        case $separator:
          if (!$betweenquotes) {
            if (!$depth) {
              if ($buffer !== '') {
                $stack[] …
Run Code Online (Sandbox Code Playgroud)

php regex split preg-match-all

7
推荐指数
1
解决办法
3734
查看次数

计算字符串中图像的长度

我试图在字符串中获取图像的长度.

我的字符串

$page="<img><img><img><img>";
Run Code Online (Sandbox Code Playgroud)

从上面的字符串,我想得到输出"4图像".

我试过preg_match_all()count()运行,但它总是返回"1张图片".

$page="<img><img><img><img>";
preg_match_all("/<img>/",$page,$m);
echo count($m);
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以知道字符串中有多少图像?

php preg-match-all

7
推荐指数
1
解决办法
497
查看次数

正则表达式 - 获取元素以呈现if语句

我正在设计一个脚本并试图在php中没有eval的if构造.

仍然不完整但爆破,它是做一个模板引擎,引擎的"if"部分.不允许赋值运算符,但我需要测试值而不允许PHP代码注入,正好不使用eval它需要在变量之间进行单独操作以防止注入攻击.

正则表达式必须捕获

[if:(a+b-c/d*e)|(x-y)&!(z%3=0)]
    output
[elseif:('b'+'atman'='batman')]
    output2
[elseif:('b'+'atman'='batman')]
    output3
[elseif:('b'+'atman'='batman')]
    output4
[else]
    output5
[endif]

[if:(a+b-c/d*e)|(x-y)&!(z%3=0)]
    output6
[else]
    output7
[endif]
Run Code Online (Sandbox Code Playgroud)

以下工作来获取if,elseif,else和endif块以及条件语句:

$regex = '^\h*\[if:(.*)\]\R(?<if>(?:(?!\[elseif)[\s\S])+)\R^\h*\[elseif:(.*)\]\R(?<elseif>(?:(?!\[else)[\s\S])+)\R^\h*\[else.*\]\R(?<else>(?:(?!\[endif)[\s\S])+)\R^\[endif\]~xm';
Run Code Online (Sandbox Code Playgroud)

请帮助选择elseif和其他.

然后使用条件语句,我可以得到以下操作:

$regex = '~([^\^=<>+\-%/!&|()*]+)([\^+\-%/!|&*])([^\^=<>+\-%/!&|()*]*)~';
Run Code Online (Sandbox Code Playgroud)

然而,它只会配对它们,错过每个第三个操作员......

谢谢你的帮助.

php regex preg-match-all

7
推荐指数
2
解决办法
440
查看次数

preg_match_all有回调吗?

我有兴趣实时替换数字匹配并将它们操作为十六进制.

我很想知道是否可以不使用foreach循环.

所以...

两者之间的一切 :

= {数值} ;

将被归为:

= {十六进制数值} ;

preg_match_all('/\=[0-9]\;/',$src,$matches);
Run Code Online (Sandbox Code Playgroud)

是否有任何回调preg_match_all所以不是预先形成一个循环,我可以在preg_match_all捕获每个匹配(实时)时立即操作它们.

这不是正确的语法,但你可以得到这个想法:

preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
Run Code Online (Sandbox Code Playgroud)

php string numeric callback preg-match-all

6
推荐指数
1
解决办法
4538
查看次数