这是一个示例PHP数组,可以很好地解释我的问题
$array = array('1' => 'Cookie Monster (<i>eats cookies</i>)',
'2' => 'Tiger (eats meat)',
'3' => 'Muzzy (eats <u>clocks</u>)',
'4' => 'Cow (eats grass)');
我只需要返回不包含此数组括号括起来的任何标记的值:
- Tiger (eats meat)
- Cow (eats grass)
为此,我将使用以下代码:
$array_no_tags = preg_grep("/[A-Za-z]\s\(^((?!<(.*?)(\h*).*?>(.*?)<\/\1>).)*$\)/", $array);
foreach ($array_no_tags as $a_n_t) {echo "- ".$a_n_t."<br />";}
假设[A-Za-z]
可能 ,\s
是空格,\(
是左括号< / strong>,^((?!
是开始标记拒绝声明,<(.*?)(\h*).*?>(.*?)<\/\1>
是标记本身,).)*$
是标记拒绝声明的结束,\)
是右括号。
没有任何作用。
print_r($array_no_tags);
返回空数组。
答案 0 :(得分:3)
您可以使用以下表达式将字符串与括号内的HTML标记匹配:
/\([^)]*<(\w+)>[^<>]*<\/\\1>[^)]*\)/
然后将PREG_GREP_INVERT
flag设置为true
,以便只返回不匹配的项目。
$array_no_tags = preg_grep("/\([^)]*<(\w+)>[^<>]*<\/\\1>[^)]*\)/", $array, true);
<强>解释强>
\(
- 匹配文字(
字符
[^)]*
- 匹配零个或多个非)
个字符的否定字符类<(\w+)>
- 捕获与开头元素的标记名称匹配的第一组[^<>]*
- 匹配零个或多个非<>
个字符的否定字符类<\/\1>
- 返回对捕获第一组以匹配结束标记的引用[^)]*
- 匹配零个或多个非)
个字符的否定字符类\)
- 匹配文字)
字符如果您不关心元素标记周围的括号,那么您也可以使用以下简化表达式:
/<(\w+)>[^<>]+<\/\\1>/
同样,你会使用:
$array_no_tags = preg_grep("/<(\w+)>[^<>]+<\/\\1>/", $array, true);
答案 1 :(得分:1)
您的模式看起来有点过于复杂。我认为在否定前瞻中可能是一个简单的模式,它可以检查(
)
内的任何$array_no_tags = preg_grep("/^(?!.*?\([^)<]*<\w)/", $array);
是不够的。
(
这样not match (?!
if有一个[^)<]*
左括号,后跟)
任意数量的characters that are not <
或<\w
,其次是按limit_req_zone t1Limit zone=t1Zone:10m rate=200r/s;
limit_req_zone t2Limit zone=t2Zone:10m rate=90r/s;
server {
location /api{
content_by_lua_block {
ngx.req.read_body();
local reqBody = ngx.req.get_body_data()
local res = ngx.location.capture("/getTenant", {method=ngx.HTTP_POST,body=reqBody});
local tenantId= res.body;
if tenantId== "none" then
ngx.log(ngx.ERR, "Tenant not found!");
ngx.say(tenantId);
else
ngx.req.set_header("x_myTenantId", tenantId)
local res2 = ngx.location.capture("/" .. tenantId .."/doApi", {method=ngx.HTTP_POST,body=reqBody});
if res2.status == ngx.HTTP_OK then
ngx.say(res2.body);
ngx.exit(res2.status);
else
ngx.status = res2.status
ngx.exit(res2.status)
end
end;
}
}
location /getTenant {
internal; #this is not accessible from outside.
proxy_pass http://UpStream1/getCustomer;
proxy_set_header X-Original-URI $request_uri;
}
location /tenant1/doApi {
internal; #this is not accessible from outside.
# Proxy all requests to the AReqUpStream server group
proxy_pass http://UpStream2/doApi;
limit_req zone=tenant1Zone burst=25;
limit_req_log_level notice;
}
location /tenant2/doApi {
internal; #this is not accessible from outside.
# Proxy all requests to the AReqUpStream server group
proxy_pass http://UpStream2/doApi;
limit_req zone=tenant2Zone burst=10 ;#nodelay;
limit_req_status 409;
limit_req_log_level notice;
}
}
较小的符号,后跟word character。
请记住,有很好的regex tools like regex101可用于测试模式。