简体   繁体   English

REGEX:如何匹配后跟空格并包含特定字符/符号的字符串

[英]REGEX: How to match string that followed by space and contains specific char/symbol

i have the following string 我有以下字符串

string string#string#string string
string$string (string) string string string
string string#gulaen#string string-stringan 
(string) string#string#string$string string string (string)
string string string$string#string$string#string string
string string#string$string#string string
string#string$string#string string

with this pattern /\\b(\\w+[\\#\\$])\\w+\\b/ i try to match string that followed by space and contains # and $ but i can't get the result that i want. 使用这种模式/\\b(\\w+[\\#\\$])\\w+\\b/我尝试匹配字符串,其后跟空格,并包含#和$,但是我无法获得想要的结果。 i get the folowing result 我得到以下结果

在此处输入图片说明

what i expect is to match the following highlighted blue: 我期望匹配以下突出显示的蓝色:

在此处输入图片说明

how to achieve that? 如何实现的? thanks 谢谢

You may create a group that will match the special symbol and 1+ word chars, and quantify it with + : 您可以创建一个将特殊符号和1+个字符char匹配的组,并用+对其进行量化:

/\b\w+(?:[#$]\w+)+\b/

See the regex demo 正则表达式演示

The pattern matches: 模式匹配:

  • \\b - a word boundary \\b单词边界
  • \\w+ - 1+ word chars \\w+ -1个以上的字符字符
  • (?:[#$]\\w+)+ - a non-capturing group that matches 1 or more consecutive occurrences of a # or $ chars followed with 1+ word chars (?:[#$]\\w+)+ -一个非捕获组,它匹配1个或多个连续出现的#$字符,后跟1+个单词字符
  • \\b - a word boundary. \\b单词边界。

See the PHP demo : 参见PHP演示

echo preg_replace('/\b\w+(?:[#$]\w+)+\b/u', '<span>$0</span>', $str);

Output for the $str in question: 有关$str输出:

string <span>string#string#string</span> string
<span>string$string</span> (string) string string string
string <span>string#gulaen#string</span> string-stringan 
(string) <span>string#string#string$string</span> string string (string)
string string <span>string$string#string$string#string</span> string
string <span>string#string$string#string</span> string
<span>string#string$string#string</span> string

Matching code demo : 匹配代码演示

if (preg_match_all('/\b\w+(?:[#$]\w+)+\b/u', $str, $m)) {
    print_r($m[0]);
}

Output: 输出:

Array
(
    [0] => string#string#string
    [1] => string$string
    [2] => string#gulaen#string
    [3] => string#string#string$string
    [4] => string$string#string$string#string
    [5] => string#string$string#string
    [6] => string#string$string#string
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM