正则表达式麻烦

时间:2009-08-26 06:18:12

标签: regex escaping character

我一直在努力为我的一个小项目获得正常的表达式。任何人都可以帮助我使用匹配<>符号内的任何内容的正则表达式,但只有当它们前面没有\符号时才能帮助我吗?

例如:

<Escaped characters \<\> are right in the middle of this sentence.>, <Here is another sentence.>

必须匹配

1: Square brackets \<\> are right in the middle of this sentence.
2: here is another sentence.

到目前为止,我已经管理了

/<([^\\][^>]*?)>/ig

但是这给了

1: Escaped characters \<\
2: Here is another sentence.

我做错了什么? :(

4 个答案:

答案 0 :(得分:1)

Crimson的答案对我来说在Regex Powertoy中使用<Escaped characters \<\> are right in the middle of this sentence.>, <Here is another sentence.>作为测试进行测试并不起作用,但这似乎有效:

/<(?<!\\<).*?>(?<!\\>)/gi

给我两场比赛: <Escaped characters \<\> are right in the middle of this sentence.><Here is another sentence.>

编辑:我看了一下字符串Gumbo说不匹配。我在regex.powertoy.org中没有遇到任何问题:

alt text http://img362.imageshack.us/img362/3227/regexpowertoyorg.png

在测试中,我确实将原始发布的正则表达式更改为: /(?<!\\)<(.*?)(?<!\\)>/gi ,这样效率更高(探测次数更少)。

另外我在regex.powertoy.org的输出中注意到第四个字符串(\<hello <match\<this\>> but not this\> looks odd... the printed replacement is just匹配but the match detail clearly shows that the match is correct;匹配\ . But I also notices that the first and third test string replacements don't print the "`“转义尖括号。稍后(但是并非详尽无遗)我认为这是通过javascript显示文本的问题,转义的尖括号不打印转义字符,非空的尖括号根本不打印。我想这个是因为javascript将其视为HTML。所以;我认为这个正则表达式工作正常。但你应该离线测试它。

答案 1 :(得分:1)

我会用这个:

/<((?:[^\\>]+|\\.)*)>/

答案 2 :(得分:0)

您需要的是后视操作员。在这里阅读它们:

http://www.perl.com/pub/a/2003/07/01/regexps.html

这是你需要的表达方式:

/<(?!<\\).*>(?!<\\)/

由于上面的*运算符是贪婪的,它应该包括任何转义的尖括号/&lt; /&GT;

编辑:我假设您希望匹配并返回转义的尖括号。如果你想要不同的东西,请澄清 - 给出一个简洁的例子a)输入字符串和b)要返回的匹配

答案 3 :(得分:0)

试试这个

/<[^\\]([^>]+)>/