2010-07-26 104 views
2

我試圖在我學校的新聞網站(運行WordPress)上使用PHP中的正則表達式。想法是,無論何時有人保存帖子,「Regis」的所有實例(最後沒有'Jesuit')都被替換爲「Regis Jesuit」。 (我去瑞吉斯耶穌會高中,他們挑剔他們的品牌)。總體而言,這正常工作與以下不區分大小寫的正則表達式:匹配不帶引號的字符串

/regis(?! jesuit)/i 

我將如何修改這個正則表達式,所以如果找到字符串不匹配的「吉斯」或「瑞吉」(單次或雙引號) ? (甚至「我也去瑞吉斯高中」)?這裏的想法是在必要時對其進行更改,但要將其與人的故事中的直接引用保持一致,這樣我們就不會改變人們的報價。

謝謝! Morgan Morgan

+4

您將要遇到的問題是匹配引號對。 「我去了瑞吉斯高中,」最近Regis的研究生John Integer說,「但是我還沒有我的瑞吉斯明礬卡。」「要告訴任何正則表達式解析器,案件不在兩個引號之間。此外,由於AP樣式需要引號來開始段落引用*,但如果後續段落是引用*的延續,則不會結束它,所以確實非常棘手。 – Robusto 2010-07-26 14:13:21

+0

另外,假設所有人都知道或關心正確的引用,或者他們使用* only *單引號或雙引號,並且永遠不會忘記關閉引號,這太「樂觀」了。 *另外:你不想改變「引用」的文字。東西人在文本字段中輸入**是被引用的文本,不管他們在帖子中是否引用了其他人。考慮一下。* – Tomalak 2010-07-26 14:19:12

+1

哦,在我忘記之前:假設「裏吉斯」永遠不會成爲別的什麼比你的學校是短視的,至少可以說。做一個谷歌搜索「雷吉斯」,並驚訝於它可能意味着多少不同的事情。 – Tomalak 2010-07-26 14:21:58

回答

1

根據對問題的評論,解決方案可能是堅持使用當前的正則表達式,但僅將其用作客戶端JavaScript警告。

因此,如果輸入的文本與「regis」沒有後跟「jesuit」,那麼在用戶提交之前,只會顯示一條消息「確保您已正確給我們貼上了標籤」,但不會自動更改任何內容 - 基本上將語言複雜性留給可以(希望)理解它的人的大腦。 :)

+0

我明白你要去哪裏了。但是,我認爲我發現了一個更好的解決方案。 管理高中生們的新聞報道已經夠難了。我們嘗試過您之前建議的解決方案,但效果不佳。人們稱這所學校爲「瑞吉斯」,但學校希望它被稱爲「瑞吉斯耶穌會」。儘管如此,沒人聽。 – integ3r 2010-07-26 18:26:23

+1

我們的作家95%的時間都把瑞吉斯耶穌會稱爲「瑞吉斯」。 解決方案(在我看來)是使用我曾經有過的相同的正則表達式,但有一個修改: /(?<!\\ [\\\\)regis(?! jesuit)(?!\\] \\ ])/我 我已經設置它,以便人們可以輸入「瑞吉斯」本身只有當他們輸入爲「[[Regis]]」(其他5%的時間)。顯示帖子時,過濾器會將其更改回「Regis」。 我認爲這是最好的解決方案,因爲它不會消除只說「Regis」的選擇。 – integ3r 2010-07-26 18:30:22

相關問題