Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 - Fatal编程技术网

Php 正则表达式获取单个特定字符前面的所有单词(=前面有或没有空格)

Php 正则表达式获取单个特定字符前面的所有单词(=前面有或没有空格),php,regex,Php,Regex,我们正在门户网站上为客户提供一些模板引擎。属性被数据源中的信息替换 下面是这样一个模板的示例,其中包含不同的引号、空格和嵌套: <html> <body> <h1 class="title">Some Title</h1> <div id="output"> [%if findthis1='123']

我们正在门户网站上为客户提供一些模板引擎。属性被数据源中的信息替换

下面是这样一个模板的示例,其中包含不同的引号、空格和嵌套:

<html>
    <body>
        <h1 class="title">Some Title</h1>
        <div id="output">
            [%if findthis1='123']
                Bla bla bla ["findthis2"] Bla Bla Bla
            [%elseif (findthis3 = "123")]
                Bla Bla Bla ['findthis4'] Bla Bla Bla
            [%elseif ( findthis5 = "123" )]
                Bla Bla Bla [findthis6] Bla Bla Bla
            [%elseif (   findthis7   =   "123" OR findthis8   =   123   )    AND       findthis9='123']
                [findthis10] Bla Bla Bla
            [%elseif ( findthis11 = "123" OR ( findthis12=123 AND findthis13='123' ) ]
                 Bla Bla Bla [findthis14]
            [%endif]

            [%uppercase findthis15]
            [%lowercase findthis16 ]
        </div>
    </body>
</html>
编辑4:好的,经过一些实验,我们仍然无法改进正则表达式以实现我们的目标

通过使用
/\[\%(if | elseif)()*?(\])/
,我们得到了类似的结果(请忽略我使用的行与上面的行不同的事实):

但是现在,最后一步是使用PHP的preg_match函数获取单词“hello”、“stack”、“overflow”、“how”、“are”和“you”

以下(错误)正则表达式过于贪婪:

(\ |\()+(?:(?!(=|<|&lt;|>|&gt;|<=|>=|<>|&lt;&gt;|!=)).)*
(\ |\()+(?:(?!(=|||=|||!=))*

最后一个正则表达式缺少什么?

至于您已经到达的最后一步,您可以使用

\w[^=\s]*(?=\s*=)

详情:

  • \w
    -一个单词字符(字母、数字或
    \u
  • [^=\s]*
    -除
    =
    和空格外,零个或多个字符
  • (?=\s*=)
    -一个正向的前向查找,它匹配一个紧接着零个或多个空格的位置,然后是一个
    =
    字符

添加一个预期结果的示例将有助于理解您的问题。这是所有的
查找词吗?如果是这样,您的问题似乎只涉及其中的一些(在
=
之前),而您的代码包含其他属性,如
[%uppercase findthis15]
@El\u Vanja这些查找属性可以是任何东西,如“电子邮件”,“gender”、“firstname”、“lastname”等。正如我在最后一句中提到的,我们将为“非运算符语句”编写一个不同的正则表达式,如
[%uppercase findthis15]
。EDIT4正则表达式很简单,
\w+(?=\s*=)
\w[^=\s]*(?=\s*=)
@WiktorStribiżew Hi Wiktor,非常感谢。我刚刚尝试了您提到的两种解决方案中的第一种,看起来效果不错。
[%if hello="abc" OR ( (stack=123 AND overflow = "bla") OR (how= 'bla' AND are ='bla') AND you = 'xyz' )]
(\ |\()+(?:(?!(=|<|&lt;|>|&gt;|<=|>=|<>|&lt;&gt;|!=)).)*