仅当字符不在开头和结尾时才应用正则表达式

时间:2013-06-07 16:38:04

标签: regex vb.net

我正在尝试从vb.net中查找和替换PHP文件中的PHP变量。我在一个循环中成功地做到了这一点:

"\B\$foo\b"
"\B\$boo\b"
.....

现在我想在阅读Smarty样式文件时排除替换。

Smarty变量就像PHP变量,但在{和}字符内。

例如

希望在本文中找到并替换$ foo,但不要触及{$ boo}:

  

这只是$ foo的一个例子而不是{$ boo}!

需要知道在vb.net中正常的正则表达式

2 个答案:

答案 0 :(得分:0)

使用具有环视功能的正则表达式:

(?<!\{)\B\$foo\b(?!\})

外观教程:http://www.regular-expressions.info/lookaround.html

编辑:我很想使用平衡组,但我不会简单,所以根据你的评论,这是我的解决方案:

(?<=(?:^|\})[^{]*)\B\$foo\b(?=[^}]*(?:$|\{))

答案 1 :(得分:0)

对您的正则表达式进行一些小改动,以确保{和}不匹配通过负面的lookbehind和lookahead:

(?<!\{)\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?!\})

(?!\})表示在此之前不匹配}。

(?&lt;!\ {)表示不匹配{此后面。