Title: -split operator doesn't let you use options SingleLine and MultiLine at the same time (and it should) · Issue #4712 · PowerShell/PowerShell · GitHub
Open Graph Title: -split operator doesn't let you use options SingleLine and MultiLine at the same time (and it should) · Issue #4712 · PowerShell/PowerShell
X Title: -split operator doesn't let you use options SingleLine and MultiLine at the same time (and it should) · Issue #4712 · PowerShell/PowerShell
Description: Steps to reproduce PS C:\> '' -split '', 0, 'singleline,multiline' The combination of options with the -split operator is not valid. + CategoryInfo : ParserError: (:) [], ParseException + FullyQualifiedErrorId : InvalidSplitOptionCombina...
Open Graph Description: Steps to reproduce PS C:\> '' -split '', 0, 'singleline,multiline' The combination of options with the -split operator is not valid. + CategoryInfo : ParserError: (:) [], ParseException + FullyQual...
X Description: Steps to reproduce PS C:\> '' -split '', 0, 'singleline,multiline' The combination of options with the -split operator is not valid. + CategoryInfo : ParserError: (:) [],...
Opengraph URL: https://github.com/PowerShell/PowerShell/issues/4712
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"-split operator doesn't let you use options SingleLine and MultiLine at the same time (and it should)","articleBody":"\u003c!--\r\n\r\nIf it is a bug report:\r\n- make sure you are able to repro it on the latest released version. \r\nYou can install the latest version from https://github.com/PowerShell/PowerShell/releases\r\n- Search the existing issues.\r\n- Refer to the [FAQ](../docs/FAQ.md).\r\n- Refer to the [known issues](../docs/KNOWNISSUES.md).\r\n- Fill out the following repro template\r\n\r\nIf it's not a bug, please remove the template and elaborate the issue in your own words.\r\n--\u003e\r\n\r\nSteps to reproduce\r\n---------------------\r\n\r\n```powershell\r\nPS C:\\\u003e '' -split '', 0, 'singleline,multiline'\r\nThe combination of options with the -split operator is not valid.\r\n + CategoryInfo : ParserError: (:) [], ParseException\r\n + FullyQualifiedErrorId : InvalidSplitOptionCombination\r\n```\r\n\r\nBut it is not an invalid combination, they do different things, and it is common and useful to use them together.\r\n\r\nThe PowerShell spec v 3.0, section 7.8.4.5 \"Binary split operator\" says:\r\n\r\n\u003e [an options string] must not contain both Multiline and Singleline.\r\n\u003e Multiline: This mode recognizes the start and end of lines and strings. The default mode is Singleline.\r\n\r\nSingleline is not the default of Multiline, they are not two sides of the same option. Multiline changes how the regex characters `^` and `$` work with newlines in a string, and Singleline changes how the regex character `.` works with newlines in a string. It is valid to use both options to change both `^$` and `.` at the same time.\r\n\r\ne.g.\r\n\r\n```powershell\r\n$text = @'\r\na12a\r\nb34b\r\nc56c\r\nd78d\r\n'@\r\n\r\n# The following split fails, because '^' only matches the start of the entire string, \r\n# and 'b' is not at the start of the string:\r\n$text -split '^b'\r\n\r\n# Enable 'Multiline' mode and '^' now matches the start of each line in the string\r\n# and this now succeeds:\r\n$text -split '^b', $numSplits, 'multiline'\r\n\r\n# The following split fails, because '.+' only matches to the end of the line, and never gets to 'c'\r\n$text -split 'b.+c'\r\n\r\n# Enable 'Singleline' mode and '.' now matches over newlines\r\n# and this now succeeds:\r\n$text -split 'b.+c', $numSplits, 'singleline'\r\n\r\n# To combine them and match from \"the b at the start of a line,\r\n# over newlines and up to the last c\" needs both singleline and multiline options.\r\n# This fails and throws an exception:\r\n$text -split '^b.+c', $numSplits, 'singleline, multiline'\r\n\r\n# but you can turn both on at the same time using regex syntax:\r\n# so it can and does work, if you work around PowerShell:\r\n$text -split '(?ms)^b.+c'\r\n# splits on the text b34b`nc56c\r\n\r\n# and you can also do it with the options string passed to the [regex] accelerator:\r\n# This works, too:\r\nPS D:\\\u003e [regex]::Split($text, '^b.+c', 'singleline,multiline')\r\na12a\r\n\r\n\r\nd78d\r\n```\r\n\r\nThe documentation in `Get-Help about_split` is also incorrect:\r\n\r\n\u003e -- Multiline: Multiline mode recognizes the start and end of lines\r\n\u003e and strings. Valid only with RegexMatch. Singleline is the default.\r\n\u003e\r\n\u003e -- Singleline: Singleline mode recognizes only the start and end of\r\n\u003e strings. Valid only with RegexMatch. Singleline is the default.\r\n\r\n\r\n - [Link to source code of parserutils.cs where the error is thrown](https://github.com/PowerShell/PowerShell/blob/7a55bf98b2370ab4817ab2533cb67673053ee446/src/System.Management.Automation/engine/lang/parserutils.cs#L726)\r\n\r\n - [Link to source code of parserutils.cs where the comment in the SplitOptionsEnum has the same inaccurate suggestion that one is the default setting of the other](https://github.com/PowerShell/PowerShell/blob/7a55bf98b2370ab4817ab2533cb67673053ee446/src/System.Management.Automation/engine/lang/parserutils.cs#L295)\r\n\r\nExpected behavior\r\n-----------------\r\n\r\nSpecifying an options string `'singleline,multiline'` is valid, and enables both Singleline and Multiline mode.\r\n\r\nThe documentation is accurate.\r\n\r\nActual behavior\r\n---------------\r\n\r\nIt throws an exception and misleadingly says they are invalid together.\r\n\r\nThe documentation is inaccurate in three senses - implying there is one option being set instead of two, implying Singleline is the opposite of Multiline, and stating Singleline \"is the default\" when Singleline itself is off by default.\r\n\r\nEnvironment data\r\n----------------\r\n\r\n\u003c!-- provide the output of $PSVersionTable --\u003e\r\n\r\n```powershell\r\n\u003e $PSVersionTable\r\nName Value\r\n---- -----\r\nPSVersion 6.0.0-beta\r\nPSEdition Core\r\nGitCommitId v6.0.0-beta.6\r\nOS Linux 2.6.32-042stab120.6 #1 SMP Thu Oct 27 16:59:03 MSK 2016\r\nPlatform Unix\r\nPSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}\r\nPSRemotingProtocolVersion 2.3\r\nSerializationVersion 1.1.0.1\r\nWSManStackVersion 3.0\r\n```","author":{"url":"https://github.com/HumanEquivalentUnit","@type":"Person","name":"HumanEquivalentUnit"},"datePublished":"2017-08-30T23:39:03.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/4712/PowerShell/issues/4712"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:f2ee6e4e-969d-80e3-d8f9-7a7a8aeb2856 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 851A:37F578:6314530:8BFDEC5:6A575180 |
| html-safe-nonce | 3225095e901d9d6e002c22539db539f35dafd679ae25d4d254a2766855758368 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NTFBOjM3RjU3ODo2MzE0NTMwOjhCRkRFQzU6NkE1NzUxODAiLCJ2aXNpdG9yX2lkIjoiNzQxMDc4MzEwNTQyNTI5Nzc5MiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | e981dc220a696d21ab269b03b8bd82eb772bbbbb0d238d667f789fe55e5c3b00 |
| hovercard-subject-tag | issue:254166591 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/PowerShell/PowerShell/4712/issue_layout |
| twitter:image | https://opengraph.githubassets.com/00a99873efcee5501e0007b6b70f941b08f52c4a013b2feeafd29f248317caa0/PowerShell/PowerShell/issues/4712 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/00a99873efcee5501e0007b6b70f941b08f52c4a013b2feeafd29f248317caa0/PowerShell/PowerShell/issues/4712 |
| og:image:alt | Steps to reproduce PS C:\> '' -split '', 0, 'singleline,multiline' The combination of options with the -split operator is not valid. + CategoryInfo : ParserError: (:) [], ParseException + FullyQual... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | HumanEquivalentUnit |
| hostname | github.com |
| expected-hostname | github.com |
| None | 4e7a7296a3830877cf21a6ad2a972c9e618a48915e03966cf0c53eb08e5aad98 |
| turbo-cache-control | no-preview |
| go-import | github.com/PowerShell/PowerShell git https://github.com/PowerShell/PowerShell.git |
| octolytics-dimension-user_id | 11524380 |
| octolytics-dimension-user_login | PowerShell |
| octolytics-dimension-repository_id | 49609581 |
| octolytics-dimension-repository_nwo | PowerShell/PowerShell |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49609581 |
| octolytics-dimension-repository_network_root_nwo | PowerShell/PowerShell |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 602250ea3b6dd8302a7220ef98adb828dbc807e4 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width