2010-06-29 32 views
0

有誰知道一個免費的網站或程序,將採取一個字符串,並呈現與適當的轉義字符引用?尋求引用字符串生成器

比方說,例如,我要引用

 
It's often said that "devs don't know how to quote nested "quoted strings"". 

而且我想可以指定是否是被包圍在單或雙引號。除了反斜槓之外,我不會親自關心任何轉義字符,但其他人可能會這樣做。

+2

任何編輯器都可以執行搜索/替換,這是不夠的嗎? – Sjoerd 2010-06-29 07:14:33

+3

適合什麼?必須使用確切的轉義約定取決於語言...... Shell腳本? Perl的? PHP?蟒蛇? TCL? – psmears 2010-06-29 07:16:53

+1

你能更好地解釋你的要求嗎?您可能想要轉義其他字符......如果您的字符串包含反斜槓,換行符或其他字符,該怎麼辦?你將如何使用字符串? – Kobi 2010-06-29 07:57:34

回答

-1

所以,我想答案是「否」。對不起,夥計們,但我沒有學到任何我不知道的東西。可能是我的錯,因爲沒有正確解答問題。

+1對於發佈的所有人而言

1

在Python中,對單引號包圍:

import re 
mystr = """It's often said that "devs don't know how to quote nested "quoted strings"".""" 
print("""'%s'""" % re.sub("'", r"\'", mystr)) 

輸出:

'It\'s often said that "devs don\'t know how to quote nested "quoted strings"".' 

你可以很容易適應這種成爲更通用的形式,和/或在命令的腳本把它包在線調用。

2

如果沒有已經逃脫字符串的雙引號的,你可以簡單地做:

str = str.replace(/"/g, "\\\""); 

否則,應檢查其是否已經逃了出來,如果不僅更換;你可以使用lookbehind。下面是什麼,我便想起第一,但它會失敗的字符串像escaped backslash followed by quotes \\" :(

str = str.replace(/(?<!\\)"/g, "\\\""); 

下可確保倒數第二個字符,如果存在,是沒有一個反斜槓。

str = str.replace(/(?<!(^|[^\\])\\)"/g, "\\\""); 

更新:只要記得JavaScript不支持向後看;你可以使用相同的正則表達式在支持正則表達式的引擎,如perl/php/.net等

2

任何體面的編程語言任何體面的正則表達式庫都有一個功能來做到這一點 - 不是很難寫一個人自己(正如其他答案所指出的那樣)。所以有一個單獨的網站或程序來做到這一點大多是無用的。

  • 的Perl有quotemeta function
  • PCRE的C++包裝具有的功能RE::QuoteMeta(警告:該鏈接巨型文件)
  • 它確實
  • PHP已經preg_quote如果您使用的是同樣的事情Perl兼容的正則表達式
  • Python的re moduleescape功能
  • 在Java中,java.util.regex.Pattern類有一個quote method
  • Perl和大多數基於Perl的其他正則表達式引擎有元字符\Q...\E,這意味着無論\Q\E之間談到字面解釋
  • 使用POSIX正則表達式大多數工具(例如grep)有一個選項,可以使它們將輸入解釋爲字符串(例如,grep -F
+1

這些都是很好的建議,但它仍然取決於輸出的用途:這些將適用於正則表達式,有時適用於雙引號字符串,但通常不適用於單引號字符串,例如... – psmears 2010-06-29 16:38:34

+1

嗯,我認爲我只是問關於正則表達式而誤解了這個問題。 – 2010-06-29 17:58:49