正则表达式匹配逗号之间的文本

Ska*_*rXa 5 php regex

我疯狂地试图让正则表达式检测用户输入中的关键字垃圾邮件.通常在开头有一些普通文本,在结尾有一些关键字垃圾邮件,用逗号或其他字符分隔.

我需要的是一个正则表达式来计算关键字的数量来标记文本供人检查.

文本通常是这样的:

[random text, with commas, dots and all]

keyword1, keyword2, keyword3, keyword4, keyword5,
Keyword6, keyword7, keyword8...
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几个正则表达式来计算匹配:

- 这只得到两个关键字中的一个

[,-](\w|\s)+[,-]
Run Code Online (Sandbox Code Playgroud)

- 这也匹配随机文本

(?:([^,-]*)(?:[^,-]|$))
Run Code Online (Sandbox Code Playgroud)

谁能告诉我一个正则表达式这样做?或者我应该采取不同的方法?

谢谢!

Tae*_*myr 8

你对我的问题的答案,这是一个匹配两个逗号之间的字符串的正则表达式.

(?<=,)[^,]+(?=,)
Run Code Online (Sandbox Code Playgroud)

此正则表达式与分隔逗号不匹配,因此不会消耗.这个正则表达式在前一句中匹配"因此不消耗".

您的正则表达式匹配并使用逗号的事实是您尝试的正则表达式仅匹配所有其他候选项的原因.

此外,如果整个输入是单个字符串,您将需要防止换行.在那种情况下,你会想要使用;

(?<=,)[^,\n]+(?=,)
Run Code Online (Sandbox Code Playgroud)

http://www.phpliveregex.com/p/1DJ


Jer*_*oen -4

我认为困难在于随机文本也可以包含逗号。

如果关键字全部位于一行并且是整个文本的最后一行,则修剪整个文本,从末尾删除新行字符。然后将文本从最后一个换行符到末尾。这应该是包含关键字的字符串。一旦你挑出了这个部分,你就可以用逗号分解字符串并计算部分。

<?php
$string = " some gibberish, some more gibberish, and random text

keyword1, keyword2, keyword3

";

$lastEOL = strrpos(trim($string), PHP_EOL);
$keywordLine = substr($string, $lastEOL);
$keywords = explode(',', $keywordLine);

echo "Number of keywords: " . count($keywords);
Run Code Online (Sandbox Code Playgroud)

我知道这不是正则表达式,但我希望它有帮助。

找到解决方案的唯一方法是找到将随机文本和关键字中不存在的关键字分开的东西。如果关键字中存在换行,则不能使用它。但是2个连续的新行吗?或者任何其他字符。

$string = " some gibberish, some more gibberish, and random text

keyword1, keyword2, keyword3,
keyword4, keyword5, keyword6,
keyword7, keyword8, keyword9

";

$lastEOL = strrpos(trim($string), PHP_EOL . PHP_EOL); // 2 end of lines after random text
$keywordLine = substr($string, $lastEOL);
$keywords = explode(',', $keywordLine);

echo "Number of keywords: " . count($keywords);
Run Code Online (Sandbox Code Playgroud)

(编辑:添加更多新行的示例 - 长镜头)