我遇到了PHP的問題。我需要讓它選擇#後面的所有字母和數字,但忽略「,」或「。」。 (逗號或句點)。目前它包括他們,我似乎無法讓他們排除他們。如何執行正則表達式排除逗號或句點
例如:#3431A或#4561AB(但忽略和,或在他們身後。)
preg_match_all(apply_filters("wpht_regex_pattern", '/#(\S+)/u'), strip_tags($content), $hashtags);
我遇到了PHP的問題。我需要讓它選擇#後面的所有字母和數字,但忽略「,」或「。」。 (逗號或句點)。目前它包括他們,我似乎無法讓他們排除他們。如何執行正則表達式排除逗號或句點
例如:#3431A或#4561AB(但忽略和,或在他們身後。)
preg_match_all(apply_filters("wpht_regex_pattern", '/#(\S+)/u'), strip_tags($content), $hashtags);
您匹配\S+
爲1或以上的非空白字符的。在你的問題中,你說你想要一些數字和字母。要獲得字母和數字,您需要一個不同的模式。
function testFilter($test) {
$content = $test['test'];
echo "Testing {$content}\n";
preg_match_all(apply_filters("wpht_regex_pattern", '/#([A-Za-z0-9]+)/u'), strip_tags($content), $hashtags);
$expect = $test['expect'];
echo " ";
if (! empty($expect)) {
$tmp = implode(',', $hashtags[1]);
if ($tmp != $expect) echo "FAIL ";
else echo "PASS ";
}
else {
echo " ";
}
echo 'Hashtags: '. implode(',', $hashtags[1]);
echo PHP_EOL;
}
$contentTest = [
['test' => '#shoes, #friends, #beach', 'expect' => 'shoes,friends,beach'],
['test' => '#shoes, #friends6, #2beach', 'expect' => 'shoes,friends6,2beach'],
['test' => '#shoes, #frie_nds, #be^ach', 'expect' => 'shoes,frie,be'],
['test' => 'blah blah #shoes, #friends, #beach', 'expect' => 'shoes,friends,beach'],
['test' => '#shoes, #friends, #beach,', 'expect' => 'shoes,friends,beach'],
['test' => '#shoes, #friends, #beach,#', 'expect' => 'shoes,friends,beach'],
['test' => '#shoes, #friends, #beach som trailing text', 'expect' => 'shoes,friends,beach'],
['test' => '#3431A, #345ADF', 'expect' => '3431A,345ADF'],
['test' => 'The quick brown #fox gave the #99dogs codes #A00BZ90A #45678blah #0569509 #09XX09', 'expect' => 'fox,99dogs,A00BZ90A,45678blah,0569509,09XX09'],
];
foreach ($contentTest as $t) {
testFilter($t);
}
輸出:
Testing #shoes, #friends, #beach
PASS Hashtags: shoes,friends,beach
Testing #shoes, #friends6, #2beach
PASS Hashtags: shoes,friends6,2beach
Testing #shoes, #frie_nds, #be^ach
PASS Hashtags: shoes,frie,be
Testing blah blah #shoes, #friends, #beach
PASS Hashtags: shoes,friends,beach
Testing #shoes, #friends, #beach,
PASS Hashtags: shoes,friends,beach
Testing #shoes, #friends, #beach,#
PASS Hashtags: shoes,friends,beach
Testing #shoes, #friends, #beach som trailing text
PASS Hashtags: shoes,friends,beach
Testing #3431A, #345ADF
PASS Hashtags: 3431A,345ADF
Testing The quick brown #fox gave the #99dogs codes #A00BZ90A #45678blah #0569509 #09XX09
PASS Hashtags: fox,99dogs,A00BZ90A,45678blah,0569509,09XX09
你可以試試"/#[0-9A-Za-z]+/"
,如果你想選擇主題標籤具有唯一的字母和數字。 如果您想要抓取從#
開始的標籤,並在遇到空格(或製表符),逗號或句點之前結束,您可以嘗試"/#[^\s,\.]+/"
。
下面是樣本PHP代碼和結果:
$content="I need to have it select all letters and numbers following the #, but ignore ',' or '.' (commas or periods). Ex: #3431A D, #3431AB or #4561AB.";
echo "<h2>Regex-1:</h2>";
preg_match_all("/#[0-9A-Za-z]+/", $content, $hashtags);
print_r($hashtags);
echo "<h2>Regex-2:</h2>";
preg_match_all("/#[^\s,\.]+/", $content, $hashtags);
print_r($hashtags);
結果:
Regex-1:
Array ([0] => Array ([0] => #3431A [1] => #3431AB [2] => #4561AB))
Regex-2:
Array ([0] => Array ([0] => #3431A [1] => #3431AB [2] => #4561AB))
我已經試過了,但一旦數字結束,它忽略了阿爾法。 (例如:#3431A只返回#3431) – bworkman
這並不是我在運行測試中看到的。看到我包括的輸出。 – ryantxr