Có phải tất cả các lập trình viên phải học các biểu thức chính quy? [đóng cửa]


82

Tôi chưa quen với lập trình, và tại một cuộc phỏng vấn tôi có một câu hỏi về cách diễn đạt thông thường; Không cần phải nói tôi không thể trả lời. Vì vậy, tôi đã tự hỏi liệu tôi có nên học biểu thức chính quy? Có phải là bắt buộc cho mọi lập trình viên của tất cả các lĩnh vực? Hoặc nó là phải cho lập trình cho một số lĩnh vực cụ thể?

Câu hỏi liên quan:


55
Cá nhân tôi biết chúng là gì, khi nào nên sử dụng chúng và làm thế nào để google cú pháp. nhún vai
Tyanna

35
Đó là một điều bắt buộc cho tất cả người dùng quyền lực. Và các lập trình viên phải là người sử dụng năng lượng để có hiệu quả.
SK-logic

8
Tại sao bạn không muốn tìm hiểu chúng? Bạn đã từng gặp ít nhất một tình huống mà bạn sẽ được hưởng lợi từ việc biết chúng. Không phải lý do là bạn có thể thấy mình trong một tình huống tương tự trong tương lai sao?
FishBasketGordo

23
Chỉ những người làm việc với văn bản :)
Steve Jackson

Câu trả lời:


113

Biểu thức chính quy là một công cụ vô cùng tiện lợi, có sẵn trên nhiều ngôn ngữ mà hầu hết các nhà phát triển sẽ học chúng sớm hay muộn.

Đối với một người phỏng vấn, họ là một cách hay để thăm dò kinh nghiệm trong một cuộc phỏng vấn. Nếu bạn đang phỏng vấn ai đó tuyên bố nhiều năm kinh nghiệm không hiểu họ, bạn cần phải đào sâu hơn.


4
Tôi đồng ý, đó là một câu hỏi hay cho bất kỳ nhà phát triển có kinh nghiệm. Nhưng hỏi một sinh viên mới ra trường không có kinh nghiệm làm việc về họ có lẽ hơi bất công - trừ khi họ thực sự muốn lọc ra những ứng viên không có kinh nghiệm lập trình thực tế nào cả.
SK-logic

2
@ SK-logic: Phụ thuộc vào trường học. Tất cả chúng ta đều có một khóa học bắt buộc vào năm thứ 2 sử dụng các biểu thức chính quy khá nặng nề (tôi thừa nhận, đó là nơi tôi bị cuốn hút vào chúng;)). Và hơn một vài khóa học cấp cao đã đưa họ trở lại, mặc dù không bao giờ mạnh mẽ như vậy.
Thất vọngWithFormsDesigner

Đồng ý với các nhận xét ở trên - Tôi sẽ không mong đợi ai đó mới ra trường nhất thiết phải biết các biểu thức thông thường. Nhưng tôi vẫn có thể hỏi.
ptyx

13
Tôi là một nhà toán học, vì vậy tôi không có nền tảng chính thức về khoa học máy tính, nhưng tôi đã nghĩ rằng regexes thực sự được dạy trong các khóa học đại học, trong khi loại bỏ ngữ pháp, trình phân tích cú pháp, máy tự động và không có gì. Tôi thực sự mong đợi rằng một người mới ra trường sẽ có kiến ​​thức tốt hơn là một lập trình viên có kinh nghiệm không có nghiên cứu về CS. : - /
Andrea

8
@Andrea, khi tôi còn học đại học (BS về Khoa học máy tính), các biểu thức chính quy thực sự được đề cập khi học về ngữ pháp và automata. Tuy nhiên, đó chỉ là khái niệm chính thức được đề cập chứ không phải ứng dụng. Chúng tôi đã không học cú pháp biểu thức chính quy tương thích POSIX hoặc Perl hoặc cách sử dụng chúng trong mã hóa của chúng tôi. Chúng tôi đã học cách vẽ sơ đồ trạng thái của máy tự động trạng thái hữu hạn, viết rằng như một biểu thức chính quy, v.v ... Các chữ cái Hy Lạp có liên quan, không phải là tệp grep và tệp văn bản.
Adam Jaskiewicz

54

Biểu thức chính quy là một công cụ. Nó tình cờ là một công cụ rất hữu ích, vì vậy nhiều người chọn học cách sử dụng nó. Tuy nhiên, không có "yêu cầu" nào để bạn học cách sử dụng công cụ cụ thể này, ngoài ra còn có "yêu cầu" để bạn học bất cứ điều gì khác.


19
Điều này đúng như nói rằng việc hiểu logic boolean là hữu ích, nhưng không bắt buộc.
Oded

1
@Oded: Tôi chưa tìm thấy bất kỳ cách sử dụng nào cho logic boolean được dạy trong khóa học của mình.
DeadMG

16
@DeadMG, tôi sử dụng logic boolean mọi lúc, chẳng hạn như trong chuyển đổi: if (!(foo && bar))=> if (!foo || !bar). Có thể bạn đã sử dụng nó và chưa nhận ra, hoặc có thể bạn chưa được dạy đúng tài liệu.
zzzzBov

7
Thích kiểm soát phiên bản? Hay kiểm thử phần mềm?
Konrad Rudolph

2
@ruakh - Tôi đồng ý rằng chúng cực kỳ hữu ích; Tôi sử dụng chúng mọi lúc. Tôi nghĩ rằng tất cả các lập trình viên nên học cách sử dụng regexes tại một số điểm trong sự nghiệp của họ. Câu hỏi, tuy nhiên, đã không hỏi điều đó.
Eykanal

33

Tôi sẽ không ngạc nhiên nếu, ví dụ, một lập trình viên trò chơi hoặc lập trình viên tại LHC không bao giờ học các biểu thức chính quy. Tôi thậm chí có thể cho một lập trình viên trò chơi vượt qua khi không biết SQL.

Nhưng, nếu bạn đang làm việc trong các hệ thống thông tin dưới bất kỳ hình thức nào, và nếu bạn không biết các biểu thức thông thường, thì bạn đang tự làm mất tinh thần.

Mặt khác, tôi sẽ không mong đợi lập trình viên IS tiêu chuẩn của bạn biết toán học ma trận mà một lập trình viên trò chơi sẽ làm. Có những ngành lập trình riêng biệt, tuy nhiên chúng ta phải thuộc về "hệ thống thông tin".


1
Các lập trình viên tại LHC có thể sử dụng các biểu thức thông thường để tìm kiếm thông qua các tệp dữ liệu được tạo bởi các cảm biến. Các lập trình viên trò chơi có thể sử dụng các biểu thức thông thường để tìm kiếm các tệp nhật ký được tạo bởi các trò chơi của họ. Ok, họ có thể không phải , nhưng nó có thể làm cho những nhiệm vụ như vậy dễ dàng hơn nhiều.
Thất vọngWithFormsDesigner

1
Tôi đồng ý, nhưng nếu tôi đang phỏng vấn cho vị trí lập trình viên trò chơi, tôi vẫn sẽ thuê ai đó nếu họ không biết biểu hiện thông thường là gì. Nếu tôi thuê một người nào đó trong vai trò lập trình kinh doanh truyền thống, những người không biết biểu thức chính quy là gì, họ có thể sẽ không được thuê.
Jonathan Rich

Điều đó công bằng, tôi đoán vậy.
Thất vọngWithFormsDesigner

7
Các nhà vật lý hạt hầu hết làm việc trong môi trường không giống nhau, nhưng giống như mọi thứ khác liên quan đến máy tính trong cộng đồng đó, hầu hết các kỹ năng được truyền qua các truyền thống truyền miệng. Mức độ tinh vi trong regexps khác nhau. Nhưng chúng tôi không tìm kiếm dữ liệu bằng biểu thức chính quy: có quá nhiều dữ liệu và nó không ở định dạng văn bản. Chúng tôi tìm kiếm nhật ký và DB đột xuất , mã và tài liệu nửa khẳng định, giống như mọi người khác.
dmckee

1
@FrustratedWithFormsDesigner, tôi sẽ không thuê một progrmmer trò chơi mà không biết regex. Lập trình là bản chất chuyên sâu thông tin của nó bất kể lĩnh vực . Không quan trọng bạn làm gì - trong bất kỳ môn học nào bạn có mã nguồn, trình soạn thảo văn bản có khả năng regex và tệp nhật ký. Nếu không có regex, bạn sẽ kém hiệu quả hơn trong việc thực hiện một số tác vụ nhất định (ngay cả khi bạn không cần phải viết một dòng regex duy nhất trong trò chơi được vận chuyển). Tôi không nói regex là cần thiết cho một lập trình viên trò chơi. Tôi chỉ nói rằng tôi sẽ không thuê một người không biết điều đó.
Ben Lee

22

Biểu thức chính quy là một cách rất ngắn gọn để diễn tả cách khớp các mẫu trong văn bản.

Yêu cầu phân tích và trích xuất dữ liệu từ văn bản hoặc xác thực rằng một số văn bản phù hợp với một mẫu cụ thể xuất hiện rất thường xuyên trong lập trình, vì vậy tôi sẽ nói rằng có, điều quan trọng là phải tìm hiểu về chúng và hiểu chúng.

Chúng là một công cụ tốt để có trong hộp công cụ của bạn và tôi mong mọi lập trình viên có kinh nghiệm sẽ biết cách sử dụng chúng.

Một trong những tài nguyên tốt nhất để tìm hiểu về biểu thức chính quy là cuốn sách của Jeffery Friedl, Làm chủ các biểu thức chính quy . Nó khá tiên tiến nên bạn có thể thực sự muốn đọc nó khi bạn đã có thêm một số kinh nghiệm.

Bạn có thể bắt đầu với hướng dẫn tại normal-expressions.info .


2
Đây là một vấn đề của hương vị. Tôi chưa bao giờ thực sự có nhu cầu với họ. Tôi đã sử dụng chúng trong một vài dự án, vì vậy tôi biết chúng hoạt động như thế nào nhưng tôi có thể dễ dàng tiếp tục mà không thấy chúng bị lạm dụng thường xuyên hơn tôi cảm thấy cần chúng. Để đơn giản hóa một mẫu và bạn cũng có thể sử dụng thao tác chuỗi phức tạp và sử dụng (e) BNF nhanh hơn ít nhất nếu bạn thích tôi làm việc với các trình phân tích cú pháp
Rune FS

15

Ngược lại với phần lớn các câu trả lời ở đây, tôi không nghĩ kiến ​​thức về reg exs là một kỹ năng cần thiết để trở thành một lập trình viên năng suất. Khi tôi phỏng vấn các ứng cử viên cho một vị trí, tôi sẽ đào sâu hơn nếu họ cảm thấy bắt buộc phải mang các kỹ năng của họ về bản thân họ. Tại sao? chúng thường được sử dụng ở những nơi vì chúng thích búa đúng cách nhưng thường thì thứ bạn cần là một cái vít. Tìm kiếm SO cho HTML và regex và bạn sẽ thấy khá nhiều câu hỏi và khá nhiều lý do tại sao regex là không phù hợp.

Khả năng làm đúng cách là cần thiết trước khi tôi sẽ ủng hộ việc thuê một người được phỏng vấn, kiến ​​thức về các biểu thức thông thường chắc chắn là không. Và tôi không thực sự nghĩ rằng bất kỳ ai tin rằng bạn có thể là lập trình viên năng suất hơn khi biết regex nhưng thiếu các lĩnh vực như phân tích, thiết kế và kiến ​​thức về khung được sử dụng

Chắc chắn đôi khi chúng rất tiện dụng nhưng trong hơn 20 năm làm nhà phát triển chuyên nghiệp, tôi nghĩ rằng tôi đã sử dụng chúng ít hơn 20 lần mã (và thậm chí tôi đã mã hóa một vài tập lệnh perl) Tôi thường xuyên sử dụng chúng để tìm kiếm và thay thế mặc dù.


Các lập trình viên không biết các biểu thức chính quy thường tạo ra một đống WTF lớn khi một biểu thức chính quy sẽ hoạt động rất độc đáo. Các lập trình viên CHỈ biết các biểu thức chính quy thường tạo ra một đống WTF nhỏ hơn nhưng không chính xác khi cố xử lý các ngôn ngữ không thông thường (ví dụ HTML) bằng các biểu thức thông thường.
kevin cline

14

Bất kể tên miền bạn đang làm việc là gì, các biểu thức chính quy là một công cụ hữu ích để biết vì hầu hết các ngôn ngữ lập trình được viết dưới dạng văn bản thuần túy. Do đó, Regex là một cách tuyệt vời để thao tác và cấu trúc lại mã nguồn của bạn và nó được tích hợp vào nhiều trình soạn thảo văn bản. Tôi đã thấy vô số lập trình viên thực hiện các thay đổi lặp đi lặp lại cho các tệp nguồn khi một biểu thức chính quy sẽ thực hiện các thay đổi nhanh chóng và chính xác hơn nhiều.

Đây là những gì Chương 3 của Lập trình viên thực dụng nói về văn bản đơn giản là "nguyên liệu cơ bản của lập trình".


Tại sao bạn không sử dụng một ide hỗ trợ tái cấu trúc?
NimChimpsky

2
Nếu tôi đã hỏi câu hỏi trong bài này, tôi sẽ cho bạn dấu kiểm. Đây là lý do quan trọng nhất mà tôi sẽ không bao giờ thuê một người không biết regex. Đây là một công cụ tìm kiếmchỉnh sửa mã mạnh mẽ ngay cả khi bạn không bao giờ cần phải viết một dòng mã sử dụng nó. Một số người không biết rằng đó sẽ là những đơn đặt hàng có hiệu quả thấp hơn trong một số nhiệm vụ hàng ngày.
Ben Lee

10

Jeff Atwood đã viết một blog tuyệt vời về các biểu thức thông thường, trong đó có trích dẫn tuyệt vời này:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

Ngoài ra còn có một câu trả lời tuyệt vời cho một câu hỏi hay mà một ngăn xếp tràn bạn có thể muốn kiểm tra.

Bạn chắc chắn nên biết một chút về nó. Biểu thức chính quy dễ học nhưng khó thành thạo. Bạn không cần phải tìm hiểu mọi thứ về nó để bắt đầu sử dụng nó. Chỉ cần cảm nhận về nó.

 

tl; dr

Bạn cần biết về công nghệ để có thể đưa ra quyết định tốt khi nào nên sử dụng nó.


8

Tôi làm việc trong một cơ sở mã nhúng không có sẵn thư viện biểu thức chính quy. Một tác vụ nhất định yêu cầu 275 dòng mã và mất khoảng hai tuần để gỡ lỗi tất cả các trường hợp góc, qua lại giữa người kiểm tra và nhà phát triển. Sau này tôi đã viết một hàm để làm điều tương tự như một phần của tiện ích javascript. Các chính xác cùng một nhiệm vụ sử dụng biểu thức thông thường sử dụng 10 dòng mã và làm việc một cách hoàn hảo trong khoảng 15 phút.

Bạn có cần biểu thức thường xuyên? Về mặt kỹ thuật thì không, nhưng thật ngu ngốc khi cố tình vẫn không biết gì về một công cụ hiệu quả.


6

để trích dẫn một câu trả lời khác:

Biểu thức chính quy là một cách rất ngắn gọn để diễn tả cách khớp các mẫu trong văn bản.

Vì vậy, nếu đây là một phần quan trọng trong công việc của bạn, có lẽ có một cách tốt hơn để thiết kế hệ thống bạn đang phát triển. Trừ khi nhiều văn bản là miền cụ thể cho khu vực của bạn (ví dụ: tin sinh học).

Tôi đã làm việc trên ba hệ thống doanh nghiệp khác nhau (tại ba công ty khác nhau trong hơn mười năm) và tôi đã viết chúng ít hơn năm lần, và điều đó bao gồm sao chép và dán một trình xác nhận e-mail cơ bản hai lần.


2
Rất nhiều văn bản luôn luôn là miền cụ thể. Bạn là một lập trình viên sau tất cả. Văn bản (dưới dạng mã nguồn) là tên miền của bạn. Thao tác hiệu quả văn bản với các biểu thức thông thường làm cho bạn trở thành một lập trình viên hiệu quả hơn.
tử

2
@quanticle mà không có ý nghĩa gì. Bạn thực sự thao tác mã nguồn của bạn với các biểu thức thông thường? Nghe có vẻ như một cơn ác mộng tuyệt đối. Biểu thức chính quy là một phần của mã của bạn và mã của bạn tương tác với dữ liệu cụ thể của miền.
NimChimpsky

3
Tôi thao tác mã nguồn với các biểu thức thông thường. Tái cấu trúc các đoạn mã lớn bằng tay rất tẻ nhạt và dễ bị lỗi. Sử dụng một trình soạn thảo hỗ trợ tìm và thay thế biểu thức chính quy (gợi ý: khá nhiều trình soạn thảo hỗ trợ tìm và thay thế biểu thức chính quy) giúp tái cấu trúc dễ dàng hơn nhiều.
tử

3
@Dunk anh ấy không nói rằng đó là một lợi ích hiệu quả lớn, trong suốt vòng đời của một dự án, mà là nó có thể là một lợi ích lớn trong một khoảng thời gian nhỏ. Tôi cũng đã thực hiện tái cấu trúc nơi có hàng trăm, thậm chí hàng ngàn thay đổi trong hàng tá tệp. Trong suốt vòng đời của dự án, số giờ được lưu là không đáng kể, nhưng tôi chắc chắn không muốn mất hàng giờ hoặc hàng ngày để thực hiện các thay đổi tương tự bằng tay. IDE hiện đại có thể thực hiện một số điều này cho bạn mà không cần bạn viết regex, nhưng đôi khi nó không thể (ví dụ như viết lại một mẫu xác nhận chung).
jmoreno

2
@NimChimpsky Regexps hoạt động ở mọi nơi. IDE và các công cụ tái cấu trúc chỉ hoạt động cho các ngôn ngữ cụ thể. Ví dụ: công cụ tái cấu trúc của bạn có cho phép tôi duyệt qua tất cả các mẫu của mình không và tìm / xóa một chuỗi trông giống như một số điện thoại ( sites.google.com.vn/site/steveyegge2/ .)
tử

4

Các biểu thức thông thường có thể được coi là một công cụ xử lý đa ngôn ngữ, đa nền tảng, đa ngôn ngữ. Tôi có thể sử dụng regex trong mã của mình, tôi có thể sử dụng regex trong trình soạn thảo của mình, tôi có thể sử dụng regex trên dòng lệnh!

Không chỉ là bạn cần, hoặc nên tìm hiểu chúng. Nó giống như

Ôi! TÔI YÊU ĐĂNG KÝ!


4

Bạn không cần phải biết tất cả những điều kỳ quặc của regex để trở thành một lập trình viên tuyệt vời, đặc biệt vì tất cả đều có xu hướng thay đổi một chút xung quanh việc triển khai và ngôn ngữ lập trình khác nhau. Những gì bạn làm cần phải biết là

  • Biểu thức chính quy và biểu thức chính quy là gì.
  • Những loại việc họ làm hiệu quả (phân tích ngôn ngữ thông thường)
  • Những thứ gì là vô dụng (phân tích các công cụ lồng nhau, sử dụng hàng tấn phản hồi)
  • Nơi nhận thông tin về cú pháp bất cứ khi nào bạn cần đọc hoặc viết.

Dù sao, bạn thậm chí không phải lo lắng nhiều về thời tiết, sẽ mất quá nhiều nỗ lực để tìm hiểu chúng ngay từ đầu. Các nhà khai thác đơn giản nhất ( ., *, |, (), vv) hầu như có mặt phổ biến và đi một lâu đời nào!


Tôi nghĩ rằng đây là một điểm thực sự tốt. Biết cách sử dụng các tham chiếu ngược và các tính năng nâng cao khác của một số công cụ RE chỉ hữu ích ở mức độ vừa phải. Trong nhiều / hầu hết các trường hợp, việc kết hợp sử dụng RE với một chút logic sẽ dễ đọc hơn và dễ bảo trì hơn.
Mark Bessey

3

Như đã đề cập, Regex là một công cụ , một công cụ rất hữu ích IMHO.

Xem xét ví dụ này:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Chỉ cần một dòng để chuyển đổi, ví dụ một số như 1000000.00 này thành "1.000.000.00"

Sử dụng bất kỳ phương pháp nào khác sẽ phức tạp hơn nhiều


2
và điều này không phức tạp? cái này sử dụng một số tính năng đặc biệt không có trong bộ regex tiêu chuẩn. một độ dài đơn giản và điền sẽ làm tốt cho việc này
ratchet freak

2

Nó không phải là một điều bắt buộc. Bạn chỉ cần nhận thức được sự tồn tại của chúng và khi nào nên sử dụng chúng. Các chi tiết cú pháp rất dễ tìm và sử dụng đúng bằng cách sử dụng google và các công cụ trực tuyến.


2

Tôi thực sự sẽ khuyên bạn nên học regexps. Tại nơi làm việc, khi chúng tôi tuyển dụng lập trình viên, những ứng viên không biết regrec thường nhanh chóng bị loại bỏ. Không phải vì họ hoàn toàn cần biết các biểu thức thông thường, mà bởi vì đó là một chỉ số rất tốt về mức độ hiểu biết của họ về lập trình và mức độ nghiện lập trình.

Một lập trình viên thực sự biết các biểu thức chính quy của họ

Tuy nhiên, điều này hơi thiên vị, vì tôi chủ yếu tham gia vào lập trình web, trong đó các biểu thức chính quy là thứ bạn nhất định bắt gặp rất nhiều, cả ở phía máy chủ và phía máy khách. Nếu bạn là một lập trình viên lắp ráp cho một hệ thống tích hợp trong máy rửa chén, có lẽ bạn sẽ không bắt gặp các biểu thức thông thường nào cả. Nhưng nó vẫn có thể có ích, vì trong hầu hết các trường hợp, bạn có thể sử dụng môi trường phát triển của mình nhiều hơn khi bạn biết các biểu thức thông thường (tìm kiếm và thay thế, tìm kiếm tệp, tìm kiếm trong nhiều tệp, v.v.).

Ngoài ra, bạn sẽ thấy dễ dàng được thừa nhận bởi các lập trình viên đồng nghiệp nếu bạn biết điều đó.


Ngoài ra, việc tìm hiểu các thông số kỹ thuật hoàn chỉnh ngay từ đầu là vô ích, vì có rất nhiều phương ngữ khác nhau. Thay vào đó, hãy cố gắng tập trung vào việc học những điều cơ bản: (1) tạo ra một vài biểu thức đơn giản và tìm hiểu ý nghĩa của. * + {} [] () và - và một vài lớp cơ bản. (2) với một thông số cụ thể trong tay, hãy cố gắng hiểu những gì đang xảy ra trong các biểu thức bạn gặp phải.
Aron Cederholm

Bạn sử dụng reg exps để làm gì trong web dev. Đó là những gì tôi làm và tôi đã sử dụng như 5 lần trong 10 năm +.
NimChimpsky

Đối với người bắt đầu: Phân tích cú pháp hoặc xác thực đầu vào của người dùng (ví dụ: e-mail, mã zip / mã bưu chính, biểu mẫu tìm kiếm của người dùng). Nhưng cũng cho các mục đích I18n và l10n cho các chuỗi dịch tùy chỉnh và biến đổi trong nhiều ngôn ngữ / ngôn ngữ. Và họ chắc chắn đã giúp đỡ với một số phát hiện lỗi và xử lý lỗi khá nhiều. Và trong thế giới CMS / blog / bình luận cho đánh dấu wiki / diễn đàn. Đối với dữ liệu ngoài (đầu vào của người dùng, các trang bị loại bỏ, tài nguyên được đồng bộ hóa, v.v.) phân tích cú pháp, xử lý và viết lại nội dung / liên kết / bất cứ điều gì. Cộng với tất cả rất nhiều mục đích thống kê và đăng nhập (phát hiện trình duyệt, sắp xếp người giới thiệu, ...)
Aron Cederholm

-1 cho một nhận xét điên rồ không biết gì "Một lập trình viên thực sự ..."
Dunk

Đây là một cách khá hời hợt để xác thực đầu vào của người dùng và tôi sẽ không ngạc nhiên nếu regex của bạn chính xác 100% (xác thực email là một cách nổi tiếng). Và tôi không tìm hiểu "chuỗi dịch tùy chỉnh và biến đổi trong nhiều ngôn ngữ / ngôn ngữ" mà bạn dịch giữa các ngôn ngữ bằng regex's - er wtf? Mục đích thống kê - bạn làm thống kê với các biểu thức thông thường? Viết lại liên kết / nội dung với regexs nghe có vẻ như mùi mã đối với tôi.
NimChimpsky

1

Có phải là một? Bạn đã biết những gì bạn PHẢI biết: rằng chúng tồn tại, chúng là gì và chúng được sử dụng để làm gì. Công việc của bạn là một lập trình viên là để giải quyết vấn đề. Bây giờ bạn biết đủ để bắt đầu bao thanh toán chúng vào giải pháp của bạn để giải quyết vấn đề của bạn. Bạn có nên học regex? Chắc chắn rồi. Ưu tiên tùy thuộc vào bạn ... có những công việc mà chúng sẽ được sử dụng hàng ngày và những công việc mà chúng sẽ không bao giờ được sử dụng. Hướng dẫn đơn giản sẽ có bao nhiêu mẫu phù hợp với các vấn đề bạn mong muốn gặp phải sẽ yêu cầu.


1

Hmm, tôi cần phải phân tách bằng dấu phẩy và xuất ra danh sách các chuỗi này, hãy để tôi viết hàm chứa một vòng lặp for có một đối số dấu tách và tiếp tục nối chúng lại với nhau ... hoặc tôi chỉ có thể sử dụng lệnh 'nối' hiện có này.

Tôi cần sắp xếp các đối tượng phức tạp này dựa trên một vài thuộc tính mà mỗi đối tượng có, để tôi tự nhắc nhở mình cách viết một hàm sắp xếp, điều đó không chờ đợi, tôi chỉ có thể sử dụng hàm sắp xếp tiêu chuẩn hiện có mà ngôn ngữ này hỗ trợ. Tôi sẽ phải học cách viết một bộ so sánh tùy chỉnh nhưng nó không quá khó, rõ ràng là tốt hơn so với việc duy trì chức năng sắp xếp của riêng tôi.

Tôi hơi sợ ý tưởng về các phương thức ảo, nhưng nó sẽ giúp tôi giảm các danh sách này, mỗi danh sách cho một loại mặt hàng khác nhau, xuống một danh sách. Sau đó, tôi không phải viết nửa tá câu lệnh tương tự xử lý mỗi danh sách theo một cách khác nhau. Đoán tôi nên học tập chăm chỉ và học những điều đó bởi vì mã của tôi sẽ đơn giản và gọn gàng hơn rất nhiều nếu tôi làm điều đó.

Tôi cần trích xuất từ ​​tệp văn bản này các cặp từ và giá trị trong số tất cả các tạp âm khác này, hãy để tôi viết một trình phân tích cú pháp năm mươi dòng để đọc từng ký tự một và nếu một trong các ký tự trông giống như bắt đầu của những gì tôi tìm kiếm tôi sẽ đặt biến trạng thái này và bắt đầu phân tích cú pháp khác đi, v.v ... tất nhiên trường hợp của tôi rõ ràng là rất đặc biệt không ai gặp phải một vấn đề như thế này trước đây và đã phát minh ra một giải pháp chung có một dòng mã để làm điều đó. Điều đó nhắc nhở tôi rằng tôi nên mang những cuốn sách lập trình mà tôi chưa bao giờ đọc đến cửa hàng sách cũ.


1

Câu trả lời ngắn gọn: Không Nhưng .... kiến ​​thức là sức mạnh.

Tôi là một nhà phát triển web và tôi tìm thấy bất kỳ Biểu thức chính quy nào tôi thường cần đã được viết cho tôi. Tuy nhiên tôi đã gặp vấn đề với việc sao chép và dán và không nhận ra nó đang làm gì hay không, đó là một mối nguy hiểm khi sao chép và dán BẤT CỨ LÚC NÀO.

Một ví dụ: Một regex email tôi đã sao chép và dán không cho phép một khoảng thời gian hoặc cộng với một email được cho phép trong thông số địa chỉ email. Trong thực tế, nhiều người sử dụng gmail với factemail+sitename@gmail.com để dễ dàng lọc 'sitename' nếu họ chọn spam.


0

biểu thức chính quy? Hmmm ... đôi khi thật hữu ích khi biết họ nhưng hầu hết thời gian bạn đều sử dụng như nhau. Tôi đã sử dụng regex khá thường xuyên nhưng tôi không nói rằng tôi tốt với nó. Tôi hoàn toàn không thích nó và tôi nghĩ có nhiều điều quan trọng cần biết hơn regex.

Nhưng trong việc xác nhận các công thức hoặc dữ liệu rất hữu ích. Tôi nghĩ rằng tất cả các hình thức chuyên nghiệp được xác nhận với regex. ASP.NET sử dụng nó.

Nhưng ở tất cả: Hãy cố gắng thực hiện một biểu thức khi bạn cần và lưu nó. Bạn sẽ sử dụng chúng hy vọng tất cả hơn một lần. Nhưng đừng lãng phí thời gian của bạn với RegEx!


0

Nó phụ thuộc vào khu vực / nền tảng bạn đang làm việc

  1. Đối với ứng dụng máy tính để bàn, bạn có thể sống một cuộc sống kool mà không biết gì về các biểu thức thông thường. Nhưng nhớ bạn, Visual Studio có tìm kiếm biểu thức thường xuyên nhưng tôi tự hỏi liệu có ai sử dụng nó thường xuyên không. Tôi nghĩ là không (bạn phải sửa biểu thức chính quy của mình trước vì bạn có thể thực hiện tìm kiếm :)).

  2. Là một nhà phát triển web, rất có thể bạn sẽ phải học Biểu thức chính quy. Bạn có thể thoát khỏi nó bởi vì bạn có thể dễ dàng tìm thấy đoạn mã trực tuyến sẽ đủ cho bạn cần nhưng học tập sẽ giúp ích.

Có những lĩnh vực như tài liệu, kiện tụng, công cụ pháp lý trong đó biểu hiện thường xuyên là một công cụ không thể thiếu. Bạn phải biết điều đó. Nếu bạn không đơn giản là bạn sẽ không nhận được công việc.

Vì vậy, trong ngắn hạn, nếu nó không phải là một phần của mô tả công việc, thậm chí đừng bận tâm về nó. Nếu bạn thích học nó, hãy học nó cho vui.


0

Biểu thức chính quy là công cụ rất hữu ích, và có rất nhiều tình huống, khi lập trình viên nên sử dụng chúng. Bạn không nên học tất cả chúng bằng trái tim để sử dụng. Chỉ cần sử dụng tài liệu tham khảo và làm nhiệm vụ của bạn. Sau 10-20-50-100 (tùy thuộc vào lập trình viên) các nhiệm vụ mà bạn đã sử dụng các biểu thức chính quy, bạn sẽ biết tất cả chúng. Chúng đang được tự học, bạn không nên học chúng một cách đặc biệt.


0

Tôi đã thấy nhiều câu trả lời cho điều này rồi, nhưng tất cả chúng dường như là về giá trị của việc biết các biểu thức chính quy như một công cụ trong hộp công cụ của lập trình viên.

Tôi rất thích nghĩ về các biểu thức thông thường như là loại kiến ​​thức mở rộng sự hiểu biết của một người về cách thức hoạt động của máy tính. Khi ai đó thực sự hiểu ngôn ngữ thông thường là gì và bạn có thể diễn đạt nó bằng ba thao tác đơn giản, tôi tin rằng nó mang lại cho họ một thứ gì đó đơn giản là một công cụ để xác nhận các chuỗi đơn giản.

Họ có thể hiểu rõ hơn về phân tích cú pháp nói chung, rất hữu ích cho mọi loại lập trình và hiểu rõ hơn cách thức các công cụ chúng ta sử dụng một cách thường xuyên (trình biên dịch, trình soạn thảo, trình duyệt, v.v.).

Những lợi ích thiết thực của việc sử dụng các biểu thức chính quy tất nhiên là rất lớn. Ngay cả khi bạn không "lập trình" với họ - tôi luôn sử dụng các biểu thức thông thường để tìm / thay thế trong trình chỉnh sửa của mình và đo lường mức độ hiệu quả của chúng.

Vì vậy, trong khi không cần thiết, tôi nghĩ nó là một trong những công cụ đầu tiên mà lập trình viên nên học.


0

Rob Pike không nghĩ vậy :

Các biểu thức thông thường khó viết, khó viết tốt và có thể tốn kém so với các công nghệ khác. Các kỹ thuật phân tích và phân tích cú pháp tiêu chuẩn rất dễ viết, rất chung chung và dễ thích nghi, không có lý do gì để sử dụng các biểu thức thông thường.

Một cách khác để xem xét đó là các từ vựng và phân tích cú pháp phù hợp với các mẫu được xác định tĩnh, nhưng sức mạnh của biểu thức chính quy là chúng cung cấp một cách để thể hiện các mẫu một cách linh hoạt. Chúng rất tuyệt vời trong các trình soạn thảo văn bản và các công cụ tìm kiếm, nhưng khi bạn biết vào thời gian biên dịch mọi thứ bạn đang tìm kiếm, các biểu thức chính quy mang lại tính tổng quát và linh hoạt hơn nhiều so với bạn cần.

Việc khuyến khích các biểu thức chính quy như một liều thuốc cho mọi vấn đề xử lý văn bản không chỉ là sự lười biếng và kỹ thuật kém, nó còn củng cố việc sử dụng chúng bởi những người không nên sử dụng chúng.

Điều đáng chú ý là Pike thừa nhận rằng họ có một vị trí, tất nhiên, và IMHO, các biểu thức chính quy là một công cụ khá mạnh mẽ, đó là phần thưởng hoàn toàn cho thời gian tôi đã học để sử dụng và từ quan điểm đó, tôi hoàn toàn khuyên bạn nên học họ Nhưng có thể vấn đề thực sự là chúng là một thiết bị hỗ trợ ban nhạc giúp tôi thoát khỏi việc hiểu biết ít hơn về từ vựng và phân tích cú pháp hơn tôi nên làm. :)


0

Hãy để tôi nói, Biểu thức chính quy thường là công cụ phù hợp cho công việc và khá tiện dụng, đặc biệt là với các ứng dụng xử lý văn bản nhiều. Tuy nhiên, ghi nhớ chúng là sự điên rồ. Tôi có một bảng cheat được ghim trên tường của tôi có tất cả các ký tự đặc biệt, neo, lớp nhân vật, bộ sửa đổi mẫu, siêu ký tự ... Chỉ cần dành 20 phút để học cách sử dụng chúng và giữ một bảng cheat để giữ theo dõi mọi thứ khác. Tất cả những gì bạn cần là để có thể viết một biểu thức chính quy khi bạn cần, thường là khoảng 6 tháng một lần - khoảng khi bạn gặp phải một vấn đề trong đó chúng là công cụ tốt nhất để sử dụng cho công việc. Trừ khi bạn ở trong nhóm Perl, latex, Emacs hoặc một số nhóm xử lý văn bản nặng khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.