2012-01-28 59 views
6

在我的公司,我们最近注意到有一位开发人员没有使用语言文件,而是直接在代码中放置文本。在我的代码中查找字符串文字

我的想法是在两行之间至少有一个或多个空格的引号内搜索单词。但我得到还挺坚持

("|')(\w|\s{1,})*('|") 

这确实匹配的文本,但不要求有ATLEAST 1字和ATLEAST 1个空格(所以大约引号之间的任何比赛)。谁能帮我吗?

我想用这种语言是PHP包含一个“字”和一个空格(或我可以做一个记事本+搜索)

+0

什么编程语言? – 2012-01-28 15:20:03

+0

在问题中增加了语言 – Rob 2012-01-28 15:29:28

+0

感兴趣的引语里面有什么?除了文字和空格之外的任何内容他们看起来像“foo bar baz”吗?逃生是否允许?有问题的开发人员使用的代码是哪种语言(您正在搜索的代码)? – Qtax 2012-01-28 16:13:59

回答

2

如果你想匹配单或双引号中的字符串(不逃逸)你可以使用:

"(?=[^"\n]*\w)(?=[^"\n]*\s)[^"\n]+"|'(?=[^'\n]*\w)(?=[^'\n]*\s)[^'\n]+' 

在PHP它会是什么样子:

preg_match_all("/\"(?=[^\"\n]*\\w)(?=[^\"\n]*\\s)[^\"\n]+\"|'(?=[^'\n]*\\w)(?=[^'\n]*\\s)[^'\n]+'/", $string, $matches); 
+0

谢谢,作品像一个魅力!不好,我不能全部阅读,但需要花一些时间来研究正则表达式。现在唯一的问题是它也需要文字之间的所有词。搜索EOL可以解决这个问题吗? – Rob 2012-01-28 16:26:21

+0

+1,希望字符串不能包含转义。如果可能的话,一个正则表达式会变得相当混乱。我收回了我的解决方案,因为我发现越来越多的边缘案例会失败...... – 2012-01-28 16:36:02

+0

@Rob,“它也需要文字之间的所有词”,你是什么意思?你能举一些例子吗?如果字符串没有跨越多行,您可能还想将所有的[^“]和[['']'改为'[^”\ n]'和'[^'\ n]'。 @Tim,谢谢。你说得对,如果有逃跑,最好用另一种方式写,更像你的。 – Qtax 2012-01-28 19:27:54