2010-07-26 105 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

相关问题