簡體   English   中英

正則表達式查找以特定字符開頭的單詞

[英]Regex to find words that start with a specific character

我試圖找到一個特定字符開頭的單詞,如:

Lorem ipsum #text Second lorem ipsum。 你好嗎。 沒關系。 完成。 現在#else。

我需要用“#”開頭所有單詞。 所以我的預期結果是#text,#are,#else

有任何想法嗎?

搜索:

  • 那些不是單詞字符的東西
  • 一些單詞字符

試試這個:

/(?<!\w)#\w+/

或者在C#中它看起來像這樣:

string s = "Lorem ipsum #text Second lorem ipsum. How #are You. It's ok. Done. Something #else now.";
foreach (Match match in Regex.Matches(s, @"(?<!\w)#\w+"))
{
    Console.WriteLine(match.Value);
}

輸出:

#text
#are
#else

試試這個#(\\S+)\\s?

在空格或行的開頭后匹配以#開頭的單詞。 根據您的使用情況,不需要最后一個單詞邊界。

/(?:^|\s)\#(\w+)\b/

括號將在組中捕獲您的單詞。 現在,它取決於您如何應用此正則表達式的語言。

(?:...)是非捕獲組。

為了適應不同的語言,我有這個(PCRE / PHP):

'~(?<!\p{Latin})#(\p{Latin}+)~u'

要么

$language = 'ex. get form value';
'~(?<!\p{' . $language . '})#(\p{' . $language . '}+)~u'

或循環使用多個腳本

$languages = $languageArray;

$replacePattern = [];

foreach ($languages as $language) {

  $replacePattern[] = '~(?<!\p{' . $language . '})#(\p{' . $language . '}+)~u';

}

$replacement = '<html>$1</html>';

$replaceText = preg_replace($replacePattern, $replacement, $text);

\\w效果很好,但據我所見,僅適用於拉丁文字。

在上面的例子中切換LatinCyrillicPhoenician

上面的示例不適用於'RTL'腳本。

以下代碼應解決此案。

  • /\\$(\\w)+/g搜索以$開頭的單詞
  • /#(\\w)+/g搜索以#開頭的單詞

Mark RegExr.com給出的答案/(?<!\\w)#\\w+/RegExr.com網站上發出如下警告

"(?<!" The "negative lookbehind" feature may not be supported in all browsers.

可以通過刪除>將警告更改為(?!\\w)@\\w+來修復警告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM