2013-03-07 24 views
7

Tôi chỉ mới lua ... và vì vậy tôi xin lỗi nếu tôi thiếu một cái gì đó cơ bản.
Tôi đang chạy một thử nghiệm đơn giản để xem liệu tôi có thể tìm thấy các giá trị nhất định trong chuỗi không.tại sao lua string.find trả về true cho trường hợp kiểm tra này?

Dưới đây là các mã:

print(string.find('[email protected]','.')) 

Thay vì thất bại, đó là những gì tôi đã mong đợi, tôi nhận được trở lại:

mymachinename:/usr/share/std/test# lua test.lua 
1  1 

Bạn có thể cho tôi biết nơi tôi sẽ sai? Cảm ơn.

+1

trùng lặp? http://stackoverflow.com/questions/15258313/finding-with-string-find –

Trả lời

6

Điều này là do trong phương pháp Lua find tìm kiếm một mẫu . represents any character.

Bạn có thể sử dụng các bộ ký tự để làm việc xung quanh vấn đề này:

print(string.find('[email protected]','[.]')) 

Đây là một link to a small demo.

+2

Sẽ dễ dàng hơn khi sử dụng '%' làm ký tự thoát, tương tự như việc sử dụng dấu gạch chéo ngược trong các cụm từ thông dụng: 'print (string.find (') fd @ testca ','%. ')) ' –

+0

@KeithThompson Thật tuyệt khi biết, cảm ơn! Tôi chỉ là người dùng bình thường của Lua, vì vậy kiến ​​thức của tôi khá hạn chế về chi tiết. – dasblinkenlight

+0

@KeithThompson Cá nhân tôi nghĩ đó là vấn đề về hương vị. Khi nói đến các biểu tượng thoát như dấu ngoặc đơn, tôi thấy '[(]' và '[)]' dễ đọc hơn '% (' và '%)' - đặc biệt khi nó xen kẽ với các dấu ngoặc đơn nhóm thực tế. Sử dụng một lớp nhân vật để thoát khỏi một ký tự đơn tạo ra một hình vuông nhỏ đẹp dễ nhận ra trong một mẫu dài hơn, và nó cũng không phải là "trung tâm" của một ký tự (trong '% (' thông tin thực tế là quyền của trung tâm những gì tôi đang xem) - Tôi nghĩ rằng thực sự giúp với đốm phù hợp với dấu ngoặc đơn và các loại tương tự –

3

Lua sử dụng các mẫu (được mô tả here) để tìm kiếm. Bạn có thể tắt các mẫu có thông số thứ tư tùy chọn:

print(string.find('[email protected]','.', 1, true)) 

Thông số thứ ba tùy chọn (1) là vị trí bắt đầu.

+0

Không, Lua không sử dụng cụm từ thông dụng, nó sử dụng * mẫu *, [được mô tả ở đây] (http: // www. lua.org/pil/20.2.html) (vì việc triển khai sử dụng ít mã hơn nhiều) –

+0

@KeithThompson: Xin lỗi, tôi đã diễn giải từ wiki người dùng lua: "Tắt tính năng biểu thức chính quy bằng cách sử dụng đối số thứ tư tùy chọn ' plain '.' Bất kể tham số boolean thứ tư cho phép tìm kiếm văn bản thuần túy – Corey

+0

Tôi vừa sửa chữa wiki (và câu trả lời của bạn). –

Các vấn đề liên quan