我在使用PHP中的RegEx从字符串中提取标题时遇到了一些问题。有一种模式,所有标题(如果它们存在 - 也可能没有标题)。
标题的模式
我在stackoverflow上有something similar,但它对我不起作用,因为它不匹配大写和小写单词之间的短语。
请帮助:)
修改
以下是一些例子:
我分析了@ Jonny5的评论并对其进行了一些修改,所以我以此结束了:
/^(?:[\p{Lu}\pN]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u
之后@PatrickQ修改了一下,所以现在最终的RegEx看起来像这样,它匹配了这个问题的所有例子。
/^(?:[\p{Lu}\pN:?]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u
答案 0 :(得分:0)
因此匹配字符串开头的任何ALLCAPS单词,可能后跟短划线,然后是后面的单词。
试试这个:preg_match("/^([A-Z]+[-:\s]?.*[A-Z]+)+/", $input_line, $output_array);
答案 1 :(得分:0)
怎么样:
preg_match('/^((?:\p{Lu}+(?:-\p{Ll}+)?\s+)+)/', $string, $match);
\p{Lu}
代表任何大写字母
\p{Ll}
代表任何小写字母
答案 2 :(得分:0)
我分析了@ Jonny5的第一条评论和它的正则表达式并对其进行了一些修改,所以我结束了这个:
/^(?:[\p{Lu}\pN]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u
之后@PatrickQ修改了一下,所以现在最终的RegEx看起来像这样,它匹配了这个问题的所有例子。
/^(?:[\p{Lu}\pN:?]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u