我正在为我正在处理的其中一个网站构建一个动态链接系统,这样你就可以放置像{_LINK_20_}
这样的东西,它会动态输入onclick事件或href属性,具体取决于如果用户启用或禁用了javascript。
唯一的问题是我最初使用循环来浏览文档,但我意识到正则表达式会更好用,因此我可以使用非连续的链接ID,它仍会检测到它们。
我只是在示例页面中对此进行测试,然后才尝试将其添加到我的OOP后端,所以这里是示例代码:
$results = array();
$string = 'asdfasdf {_LINK_2_} asdf {_LINK_1_}{_LINK_3_} asdf{_LINK_8_}';
$exp = '/{_LINK_<0-9>+_}/';
$find = preg_match($exp, $string, $results);
但是,当我使用$results
输出时,数组print_r()
没有结果。我是regex语法的完全新手,所以请放轻松我。 :)
我真正要做的是仅保存匹配文本中的数字,以便我可以循环显示正则表达式结果并根据需要替换每个链接,而无需调用{{1 }或preg_replace()
。
我也尝试了str_replace()
功能,但它也没有用。提前谢谢,抱歉,我对正则表达式非常苛刻!
答案 0 :(得分:2)
试试这个正则表达式:
$exp = '/{_LINK_[0-9]+_}/'
并使用preg_match_all。
字符类用方括号('[]')实现,而不是尖括号('&lt;&gt;')。只需使用正确的括号即可使正则表达式正常工作。
如果确实想要只保存号码,可以使用此正则表达式:
$exp = '/(?<={_LINK_)[0-9]+(?=_})/'
Click here在RegExr中查看。它的工作原理是使用lookbehind和lookahead,它们是零宽度断言(意味着它们在字符之间匹配,而不是匹配字符本身)关于其他正则表达式后面或前面的内容。
在ideone.com上查看here。