2012-03-13 35 views
7

Tôi muốn đối sánh các từ được gắn với lạc đà bắt đầu bằng ! chẳng hạn như !RedHat chứa trong $line. Tôi đang sử dụng php 5.3.10-1ubuntu2 with Suhosin-Patch (cli).Làm thế nào để phù hợp với dấu chấm than (!) Trong PHP?

Tôi đang cố gắng điều sau đây:

  • $line = preg_replace(" !([A-Z])", " $1", $line);
    • kết quả: PHP Warning: preg_replace(): No ending delimiter '!' found
  • $line = preg_replace(" \!([A-Z])", " $1", $line);
    • kết quả: PHP Warning: preg_replace(): Delimiter must not be alphanumeric or backslash
  • $line = preg_replace(" [!]([A-Z])", " $1", $line);
    • kết quả: PHP Warning: preg_replace(): Unknown modifier '('
  • $line = preg_replace(" [\!]([A-Z])", " $1", $line);
    • kết quả: PHP Warning: preg_replace(): Unknown modifier '('

thế nào là đúng cách để phù hợp với ! trong PHP regexp?

Trả lời

6

Bạn cần phải sử dụng delimiters trong regex của bạn - không tự chữ và số, như các thông báo lỗi nói:

$line = preg_replace("/ !([A-Z])/", " $1", $line); 

Thông báo các / ký tự ở đầu và cuối chuỗi regex.

Những điều này không phải là / - bạn có thể sử dụng # hoặc thậm chí ! - nhưng nếu bạn sử dụng ! sau đó bạn sẽ cần phải thoát khỏi ! char bên trong regex riêng của mình.

+0

bạn không cần phải thoát khỏi '!' –

+0

@BartKiers Có, tôi biết - Tôi vừa sao chép ngẫu nhiên một trong các tùy chọn của anh ấy - hóa ra là tùy chọn thứ hai. Tôi đã cập nhật câu trả lời ngay bây giờ. –

+0

@OP xin lưu ý rằng để sử dụng các hàm regex của php, bạn phải kèm theo biểu thức bằng dấu phân cách "ngẫu nhiên" (tự chọn). Điều này có thể là/(như trong ví dụ), nhưng cũng có thể &, *, hoặc bất cứ điều gì. Nhưng khá nhiều bất kỳ ví dụ được tìm thấy trên internet bỏ qua những thùng (đó là chính xác), do đó, đừng quên chúng :) – giorgio

-1

Hãy thử điều này:

!\b([A-Z][a-z]*){2,}\b 

Xem trước trực tiếp: http://regexr.com?30a95 (kiểm tra toàn cầu và nhiều dòng).

+1

ranh giới từ trong '!\ b [A-Z] 'có thể được bỏ qua: luôn có' \ b' giữa '!' và một chữ cái. Vấn đề của OP là các dấu phân cách mà Aleks đã đề cập trong câu trả lời của anh ta. –

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