Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

449

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi mệt mỏi vì luôn cố gắng đoán, nếu tôi nên thoát khỏi các nhân vật đặc biệt như '

^-]\
1', v.v. khi sử dụng nhiều triển khai của RegEXP.

Nó khác với, ví dụ, Python, Sed, Grep, Awk, Perl, Đổi tên, Apache, Tìm và như vậy. Có bất kỳ bộ quy tắc nào cho biết khi nào tôi nên, và khi tôi không nên, thoát khỏi các nhân vật đặc biệt? Liệu nó có phụ thuộc vào loại regexp, như pcre, posix hoặc regexps mở rộng?

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Đã hỏi ngày 29 tháng 12 năm 2008 lúc 23:32Dec 29, 2008 at 23:32

8

Những nhân vật bạn phải và bạn không được trốn thoát thực sự phụ thuộc vào hương vị regex mà bạn đang làm việc.

Đối với PCRE và hầu hết các hương vị tương thích với Perl khác, hãy thoát khỏi các lớp ký tự bên ngoài này:

.^$*+?()[{\|

Và những lớp nhân vật bên trong:

^-]\

Đối với các regexes mở rộng POSIX (ERE), hãy thoát các lớp ký tự bên ngoài này (giống như PCRE):

.^$*+?()[{\|

Thoát khỏi bất kỳ ký tự nào khác là một lỗi với Posix.

Bên trong các lớp nhân vật, dấu gạch chéo ngược là một ký tự theo nghĩa đen trong các biểu thức chính quy POSIX. Bạn không thể sử dụng nó để thoát khỏi bất cứ điều gì. Bạn phải sử dụng "vị trí thông minh" nếu bạn muốn bao gồm các nhân vật Metacharacters làm nghĩa đen. Đặt ^ bất cứ nơi nào ngoại trừ khi bắt đầu,] khi bắt đầu, và - khi bắt đầu hoặc kết thúc của lớp nhân vật để phù hợp với những điều này theo nghĩa đen, ví dụ:

[]^-]

Trong các biểu thức chính quy cơ bản POSIX (BRE), đây là những metacharacters mà bạn cần thoát để đàn áp ý nghĩa của chúng:

.^$*[\

Thoát khỏi dấu ngoặc đơn và dấu ngoặc xoăn trong Bres mang đến cho họ ý nghĩa đặc biệt của các phiên bản không được phân loại của họ có trong ERES. Một số triển khai (ví dụ: GNU) cũng mang lại ý nghĩa đặc biệt cho các ký tự khác khi trốn thoát, chẳng hạn như \? và +. Thoát khỏi một ký tự khác.^$*() {} Thường là một lỗi với bres.

Bên trong các lớp nhân vật, Bres tuân theo quy tắc tương tự như ERES.

Nếu tất cả điều này làm cho đầu của bạn quay, lấy một bản sao của Regexbuddy. Trên tab Tạo, nhấp vào mã thông báo chèn, sau đó theo nghĩa đen. Regexbuddy sẽ thêm lối thoát khi cần thiết.

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Đã trả lời ngày 30 tháng 12 năm 2008 lúc 14:01Dec 30, 2008 at 14:01

Jan Goyvaertsjan GoyvaertsJan Goyvaerts

Phim thương hiệu vàng 21K759 Huy hiệu bạc70 Huy hiệu đồng7 gold badges59 silver badges70 bronze badges

5

Hương vị Regex hiện đại (PCRE)

Bao gồm C, C ++, Delphi, Editpad, Java, JavaScript, Perl, PHP (Preg), PostgreSQL, Powgrep, PowerShell, Python, Realbasic, Real Studio, Ruby, TCL, VB.NET, VBScript, WXWidgets Khả năng tương thích Xregexp.pcre có thể thay đổi
PCRE compatibility may vary

& nbsp; & nbsp; & nbsp; & nbsp; bất cứ nơi nào:

^-]\
2


Legacy Regex Hương vị (BRE/ERE)

Bao gồm AWK, ED, EGREP, Emacs, Gnulib, GREP, PHP (EREG), MySQL, Oracle, R, Sed.pcre hỗ trợ có thể được bật trong các phiên bản sau hoặc bằng cách sử dụng các tiện ích mở rộng
PCRE support may be enabled in later versions or by using extensions

ERE/awk/egrep/emacs

& nbsp;
    Inside a character class:

^-]\
4

BRE/ed/grep/sed

& nbsp; & nbsp; & nbsp; & nbsp; bên ngoài một lớp ký tự:

^-]\
5 & nbsp; ; & nbsp; cho hành vi Regex tiêu chuẩn, Escape:
^-]\
8
    Inside a character class:
^-]\
4
    For literals, don't escape:
^-]\
7
    For standard regex behavior, escape:
^-]\
8


Ghi chú

  • Nếu không chắc chắn về một nhân vật cụ thể, nó có thể được thoát ra như
    ^-]\
    
    9
  • Các ký tự chữ và số không thể thoát ra bằng dấu gạch chéo ngược
  • Các biểu tượng tùy ý có thể được thoát ra bằng một dấu gạch chéo ngược trong PCRE, nhưng không phải là bre/ere (chúng chỉ phải được thoát ra khi yêu cầu). Đối với PCRE
    .^$*+?()[{\|
    
    0 chỉ cần thoát khỏi một lớp nhân vật, nhưng tôi đã giữ chúng trong một danh sách duy nhất để đơn giản
  • Chuỗi biểu thức được trích dẫn cũng phải có các ký tự trích dẫn xung quanh thoát ra và thường với các dấu gạch chéo ngược lại gấp đôi (như
    .^$*+?()[{\|
    
    1 so với
    .^$*+?()[{\|
    
    2 trong JavaScript)
  • Ngoài việc trốn thoát, các triển khai Regex khác nhau có thể hỗ trợ các công cụ sửa đổi, lớp ký tự, neo, định lượng và các tính năng khác. Để biết thêm chi tiết, hãy xem biểu hiện thông thường.info hoặc sử dụng regex101.com để kiểm tra các biểu thức của bạn trực tiếp

Đã trả lời ngày 25 tháng 8 năm 2015 lúc 19:12Aug 25, 2015 at 19:12

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

BeejorbeejorBeejor

7,8601 Huy hiệu vàng40 Huy hiệu bạc31 Huy hiệu đồng1 gold badge40 silver badges31 bronze badges

6

Thật không may, thực sự không có một bộ mã thoát nào vì nó thay đổi dựa trên ngôn ngữ bạn đang sử dụng.

Tuy nhiên, việc giữ một trang như trang Công cụ biểu thức thông thường hoặc biểu thức Cheat Biểu thức thông thường này có thể đi một chặng đường dài để giúp bạn nhanh chóng lọc mọi thứ ra.

Đã trả lời ngày 29 tháng 12 năm 2008 lúc 23:42Dec 29, 2008 at 23:42

Dillie-ODillie-ODillie-O

28.9K14 Huy hiệu vàng100 Huy hiệu bạc140 Huy hiệu đồng14 gold badges100 silver badges140 bronze badges

1

POSIX nhận ra nhiều biến thể trên các biểu thức chính quy - các biểu thức chính quy cơ bản (BRE) và các biểu thức chính quy mở rộng (ERE). Và thậm chí sau đó, có những điều kỳ quặc vì các triển khai lịch sử của các tiện ích được tiêu chuẩn bởi Posix.

Không có quy tắc đơn giản khi nào nên sử dụng ký hiệu nào, hoặc thậm chí ký hiệu mà một lệnh đã cho sử dụng.

Check out Jeff Friedl's Mastering Regular Expressions book.

answered Dec 30, 2008 at 0:05

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Jonathan LefflerJonathan Leffler

710k136 gold badges879 silver badges1240 bronze badges

Unfortunately, the meaning of things like ( and \( are swapped between Emacs style regular expressions and most other styles. So if you try to escape these you may be doing the opposite of what you want.

So you really have to know what style you are trying to quote.

answered Dec 29, 2008 at 23:44

DarronDarron

21k5 gold badges49 silver badges53 bronze badges

Really, there isn't. there are about a half-zillion different regex syntaxes; they seem to come down to Perl, EMACS/GNU, and AT&T in general, but I'm always getting surprised too.

answered Dec 29, 2008 at 23:37

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Charlie MartinCharlie Martin

108k23 gold badges192 silver badges258 bronze badges

Sometimes simple escaping is not possible with the characters you've listed. For example, using a backslash to escape a bracket isn't going to work in the left hand side of a substitution string in sed, namely

sed -e 's/foo\(bar/something_else/'

I tend to just use a simple character class definition instead, so the above expression becomes

sed -e 's/foo[(]bar/something_else/'

which I find works for most regexp implementations.

BTW Character classes are pretty vanilla regexp components so they tend to work in most situations where you need escaped characters in regexps.

Edit: After the comment below, just thought I'd mention the fact that you also have to consider the difference between finite state automata and non-finite state automata when looking at the behaviour of regexp evaluation.

You might like to look at "the shiny ball book" aka Effective Perl (sanitised Amazon link), specifically the chapter on regular expressions, to get a feel for then difference in regexp engine evaluation types.

Not all the world's a PCRE!

Anyway, regexp's are so clunky compared to SNOBOL! Now that was an interesting programming course! Along with the one on Simula.

Ah the joys of studying at UNSW in the late '70's! (-:

answered Dec 30, 2008 at 0:09

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Rob WellsRob Wells

35.7k13 gold badges81 silver badges146 bronze badges

3

For PHP, "it is always safe to precede a non-alphanumeric with "\" to specify that it stands for itself." - http://php.net/manual/en/regexp.reference.escape.php.

Except if it's a " or '. :/

To escape regex pattern variables (or partial variables) in PHP use preg_quote()

answered Oct 1, 2013 at 11:22

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

zylstrazylstra

7061 gold badge7 silver badges21 bronze badges

To know when and what to escape without attempts is necessary to understand precisely the chain of contexts the string pass through. You will specify the string from the farthest side to its final destination which is the memory handled by the regexp parsing code.

Be aware how the string in memory is processed: if can be a plain string inside the code, or a string entered to the command line, but a could be either an interactive command line or a command line stated inside a shell script file, or inside a variable in memory mentioned by the code, or an (string)argument through further evaluation, or a string containing code generated dynamically with any sort of encapsulation...

Each of this context assigned some characters with special functionality.

When you want to pass the character literally without using its special function (local to the context), than that's the case you have to escape it, for the next context... which might need some other escape characters which might additionally need to be escaped in the preceding context(s). Furthermore there can be things like character encoding (the most insidious is utf-8 because it look like ASCII for common characters, but might be optionally interpreted even by the terminal depending on its settings so it might behave differently, then the encoding attribute of HTML/XML, it's necessary to understand the process precisely right.

E.g. A regexp in the command line starting with

.^$*+?()[{\|
3, needs to be transferred to a set of exec system calls connecting as pipe the file handles, each of this exec system calls just has a list of arguments that were separated by (non escaped)spaces, and possibly pipes(|) and redirection (> N> N>&M), parenthesis, interactive expansion of
.^$*+?()[{\|
4 and
.^$*+?()[{\|
5,
.^$*+?()[{\|
6 ... (all this are special characters used by the *sh which might appear to interfere with the character of the regular expression in the next context, but they are evaluated in order: before the command line. The command line is read by a program as bash/sh/csh/tcsh/zsh, essentially inside double quote or single quote the escape is simpler but it is not necessary to quote a string in the command line because mostly the space has to be prefixed with backslash and the quote are not necessary leaving available the expand functionality for characters * and ?, but this parse as different context as within quote. Then when the command line is evaluated the regexp obtained in memory (not as written in the command line) receives the same treatment as it would be in a source file. For regexp there is character-set context within square brackets [ ], perl regular expression can be quoted by a large set of non alfa-numeric characters (E.g. m// or m:/better/for/path: ...).

Bạn có thêm chi tiết về các ký tự trong câu trả lời khác, rất cụ thể đối với bối cảnh RegEXP cuối cùng. Như tôi đã lưu ý, bạn đề cập rằng bạn tìm thấy lối thoát RegEXP với các nỗ lực, điều đó có lẽ là do bối cảnh khác nhau có bộ ký tự khác nhau làm nhầm lẫn bộ nhớ của bạn về các nỗ lực ).

Đã trả lời ngày 5 tháng 5 năm 2019 lúc 14:45May 5, 2019 at 14:45

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Đối với Ionic (TypeScript), bạn phải cắt giảm gấp đôi để đánh lừa các ký tự. Ví dụ: điều này là để phù hợp với một số ký tự đặc biệt):

"^(?=.*[\\]\\[!¡\'=ªº\\-\\_ç@#$%^&*(),;\\.?\":{}|<>\+\\/])"

Hãy chú ý đến các ký tự

.^$*+?()[{\|
7 này. Họ phải bị chém đôi. Nếu bạn không làm điều đó, bạn sẽ gặp lỗi loại trong mã của mình.

Đã trả lời ngày 12 tháng 9 năm 2019 lúc 19:32Sep 12, 2019 at 19:32

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Đối với

.^$*+?()[{\|
8, nếu bạn hoang tưởng và muốn thoát khỏi mọi thứ trong trường hợp, thì điều này sẽ thực hiện thủ thuật:

Từ danh sách an toàn thiết bị đầu cuối

.^$*+?()[{\|
9:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
                           [\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Áp dụng điều này:

gsub(/[!-/{-~:-@[-\140]/,   "[&]")
gsub(/\^|\\/,            "\\\\&" ) 

để làm cho :

^-]\
0

Đã trả lời ngày 1 tháng 6 lúc 19:04Jun 1 at 19:04

Hướng dẫn what characters must be escaped python? - những ký tự nào phải được thoát khỏi python?

Tôi cần phải trốn thoát những nhân vật nào trong Python?

Để chèn các ký tự là bất hợp pháp trong một chuỗi, hãy sử dụng một ký tự thoát. Một nhân vật thoát là một dấu gạch chéo ngược \ theo sau là nhân vật bạn muốn chèn.a backslash \ followed by the character you want to insert.

Những nhân vật nào nên được trốn thoát trong Regex?

Biểu đồ trong một biểu thức chính quy trước một ký tự theo nghĩa đen.Bạn cũng thoát khỏi một số chữ cái đại diện cho các lớp ký tự chung, chẳng hạn như \ w cho một ký tự từ hoặc \ s cho một không gian.Ví dụ sau phù hợp với các ký tự từ (chữ và số và dấu gạch dưới) và không gian."Ở đó, Alice ?, Jerry hỏi."\w for a word character or \s for a space. The following example matches word characters (alphanumeric and underscores) and spaces. "there, Alice?, asked Jerry."

Nhân vật nào sau đây là nhân vật thoát?

JavaScript sử dụng \ (Backslash) làm ký tự thoát cho:..
\ 'Trích dẫn đơn ..
\ "trích dẫn đôi ..
\\ Backslash ..
\ n Dòng mới ..
\ r Trở lại vận chuyển ..
\ t tab ..
\ B backspace ..
\ f Form Feed ..

Có bao nhiêu nhân vật trốn thoát trong Python đặt tên cho họ?

Vì vậy, các chuỗi thoát được hình thành bằng hai điều: thứ nhất là dấu gạch chéo ngược (\\) và thứ hai là tập hợp của một hoặc nhiều ký tự theo dấu gạch chéo ngược đó (\\).the first is a backslash (\\), and the second is the set of one or more characters following that backslash (\\).