这是一个字符串:
$test = '<a id="test">One & -Two - Three</a>';
我想将这两个字符串捕获到2个不同的变量中,如:
$string1 = 'One & -Two';
和
$string2 = 'Three';
所以我使用了preg_match_all但是我的regexp有问题:
preg_match_all('#([-;\w\ \.\/\'\d\(\)\&]+)+ - ([\w+\ \.\-]+)+#', $test, $matches);
有人可以解释一下为什么它不起作用..?我不明白我不尊重哪个'规则'..
答案 0 :(得分:1)
+
之后)
([-;\w\ \.\/\'\d\(\)\&]+)+
} causes the catastrophic backtracking issue(请参阅more on this here),因为这是(a+)+
类型的+
类型不是结束子模式的模式。已删除explode
已solves the issue。
最后一个子模式有同样的问题,但由于内部PCRE优化而不会造成麻烦。
此外,我认为您不需要任何正则表达式,使用strip_tags
和$test = '<a id="test">One & -Two - Three</a>';
$res = explode(" - ", strip_tags($test));
echo $res[0]. "\n" . $res[1];
:
include $(CLEAR_VARS)
LOCAL_MODULE := boost_atomic
LOCAL_SRC_FILES := ../dev/libcpp/boost/1.60.1/lib/libboost_atomic.a
include $(PREBUILT_STATIC_LIBRARY)
...
# boost import:
LOCAL_CPPFLAGS += -DHAVE_CONFIG_H -fexceptions -frtti
LOCAL_STATIC_LIBRARIES += boost_atomic
请参阅PHP demo