cfml中的RegEx以大写字母匹配整个单词,后跟换行符

时间:2011-05-13 07:18:36

标签: regex coldfusion

我一整天都在苦苦思索,因为正则表达不是我最喜欢的话题。

我正试图找到以下情况:

完整的单词大写 其次是空间 其次是换行 紧接着是另一个空间 接下来是以大写字母开头的另一个单词

在测试时我发现如果我定义了大写字母应该是什么(在这种情况下为S):

[A-Z] [A-Z] + \ n S

如果我将其更改为

,它会匹配

[A-Z] [A-Z] + \ n [A-Z]

现在它会拾取包含换行符的任何文本,无论它是否以大写单词开头。

我错过了一些明显的东西吗?

下面是我正在使用的一些示例文本(希望它可以粘贴,而不会丢失它的换行符)。我正在尝试找到标题(大写),以便我可以对它们进行一些更改。

 People who have a disability that would prevent them from performing required 
 basic life support skills are advised that they will not be able to achieve the 
 unit of competency. 
 ENROLLING IN FIRST AID UNITS OF COMPETENCY 
 If you are seeking to enrol in a First Aid unit of competency e.g. HLTFA301B 
 Apply first aid, you are advised that to complete the unit you must be able to 
 perform basic life support skills, for example control bleeding and perform 
 cardiopulmonary resuscitation (CPR). If you have a disability that would prevent 
 you from performing required basic life support skills you are advised that you 
 will not be able to achieve the unit of competency. 
 REQUIREMENTS AND ADVICE FOR STUDENTS PARTICIPATING IN WORK PLACEMENT 
 Some or all of the following advice will apply to you, depending on your course 
 and the type of organisation where you will be undertaking work placement. 

干杯 标记

2 个答案:

答案 0 :(得分:2)

当您匹配换行符时,请确保您认为换行符可能(或可能不会)在它们之前有回车符。特别是来自Windows的文本文件。

所以你可能想要这样的东西:

“[] [A-Z] + \ r?\ n [A-Z]”

确保不要在正则表达式中留下随机空格,因为这些空间很可能被视为文字空格。我在[]中的上面的表达式中包含了(唯一的)空格,以便更清楚它是正则表达式的一部分,并且我将整个正则表达式包含在“字符中,因为你可能想要那个。围绕该空间的[]但不应该需要。

?匹配后意味着“前面的0或更多”,所以在这种情况下我们想要一个\ n可选地前面加一个\ r。

答案 1 :(得分:2)

有两个主要问题。这些行有空格,可能还有其他字符。您至少需要使用超过[A-Z]才能搜索这些内容。您至少需要在集合[A-Z]中包含空格。如果还有其他字符,如数字或标点符号,您还需要在此处添加它们。正如karora所提到的,你需要检查休息时间的变化。

这是一个示例,其中还包含一个积极的预测,以防止它返回到结果中,因此您可以直接在代码的下一步中使用匹配结果数组。

<cfset matches = reMatch(" [A-Z ]+(?= \r?\n [A-Z])", teststring) />
<cfdump var="#matches#" />