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”
以下(错误)正则表达式过于贪婪:
(\ |\()+(?:(?!(=|<|<|>|>|<=|>=|<>|<>|!=)).)*
(\ |\()+(?:(?!(=|||=|||!=))*
最后一个正则表达式缺少什么?至于您已经到达的最后一步,您可以使用
\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' )]
(\ |\()+(?:(?!(=|<|<|>|>|<=|>=|<>|<>|!=)).)*